动态规划法求解多边形游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析与设计实验报告

第次实验

五边形测试:

附录:完整代码

#include

#include

#include

#include

#include

#define num 50

using namespace std;

int m[num][num][2],s[num][num];

int Polymax(int n,int v[],char op[]) {

int i,j,k,s1,r;

int min[num],max[num],maxf;

int e[4];

for(i=1;i<=n;i++)

m[i][1][0]=m[i][1][1]=v[i];

for(j=2;j<=n;j++)

for(i=1;i<=n;i++)

{

for(s1=1;s1<=j-1;s1++)

{

r=(i+s1-1)%n+1;

if(op[(i+s1)%n]=='+')

{

min[s1]=m[i][s1][0]+m[r][j-s1][0];

max[s1]=m[i][s1][1]+m[r][j-s1][1];

}

else

{

e[0]=(m[i][s1][0])*(m[r][j-s1][0]);

e[1]=(m[i][s1][0])*(m[r][j-s1][1]);

e[2]=(m[i][s1][1])*(m[r][j-s1][0]);

e[3]=(m[i][s1][1])*(m[r][j-s1][1]);

min[s1]=e[0];

max[s1]=e[0];

for(k=1;k<4;k++)

{

if(min[s1]>e[k])

min[s1]=e[k];

if(max[s1]

max[s1]=e[k];

}

}

}

m[i][j][0]=min[1];m[i][j][1]=max[1];

for(k=2;k<=j-1;k++)

{

if(m[i][j][0]>min[k])//计算首次删去第i条边的得分 m[i][j][0]=min[k];

if(m[i][j][1]

{

m[i][j][1]=max[k];

s[i][j]=s1;

}

}

}

maxf=m[1][n][1]; //首次删去第1条边的最大得分

for(i=2;i<=n;i++)//首次删去第i条边的最大得分

{

if(maxf

}

return maxf;

}

int main( )

{

int i,p=0;

double k=0.0;

clock_t start,end,over;

start=clock(); end=clock();

over=end-start;

start=clock();

int n,max;

int v[50];

char op[50];

cout<<"--------动态规划法--多边形游戏-----------"<

cout<<"请输入边数n:";

cin>>n;

cout<<"请依次输入符号和顶点:"<

for(i=1;i<=n;i++)

{

cin>>op[i]>>v[i];

getchar();

}

max=Polymax(n,v,op);

cout<

for(i=0;i<1000000000;i++) p=p+i;

end=clock();

printf("The time is %6.3f",(double)(end-start-over)/CLK_TCK); return 0;

}

相关文档
最新文档