讨论 / c++
yangrui6359447 2013-11-05 18:16:11
点我顶贴 收藏 删除
#include<iostream>

#include<algorithm>

using namespace std;

int stone[1002],sum[1002]={0};

int f[1002][1002]={0},g[1002][1002]={0};

int main()

{

int n;

cin>>n;

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

{

cin>>stone[i];

stone[i+n]=stone[i];

}

for (int i=1;i<2*n;i++)

sum[i]=sum[i-1]+stone[i];

for (int i=1;i<2*n;i++) f[i][i]=g[i][i]=0;

for (int k=1;k<n;k++)

for (int i=1;i+k<2*n;i++)//考察i到i+k

{

f[i][i+k]=0;

g[i][i+k]=0x7fffffff;

for (int j=0;j<k;j++) //增量

{

f[i][i+k]=max(f[i][i+k],f[i][i+j]+f[i+j+1][i+k]+sum[i+k]-sum[i-1]),

g[i][i+k]=min(g[i][i+k],g[i][i+j]+g[i+j+1][i+k]+sum[i+k]-sum[i-1]);

//cout<<f[i][i+k]<<" "<<g[i][i+k]<<endl;

}

}

int ans1(0);

int ans2(0x7fffffff);

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

ans1=max(ans1,f[i][i+n-1]);

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

ans2=min(ans2,g[i][i+n-1]);

cout<<ans2<<endl<<ans1<<endl;

//system("pause");

return 0;

}

查看更多回复
提交回复