讨论 / C的代码
technology 2015-01-07 08:51:53
点我顶贴 收藏 删除
#include<stdio.h>

#define maxlongint 1000000

int main()

{

int n,stone[200]={0},sum[105][105]={0},fmin[105][105]={0},fmax[105][105]={0};

scanf("%d",&n);

int a,b,c,i,d;

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

{

scanf("%d",&stone[i]);

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

}

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

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

sum[a][b]=stone[a]+sum[a%n+1][b-1];

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

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

{

fmin[a][b]=maxlongint;

fmax[a][b]=-maxlongint;

for(c=1;c<=b-1;c++)

{

d=(a+c-1)%n+1;

if(fmin[a][b]>fmin[a][c]+fmin[(a+c-1)%n+1][b-c]+sum[a][b])

fmin[a][b]=fmin[a][c]+fmin[(a+c-1)%n+1][b-c]+sum[a][b];

if(fmax[a][b]<fmax[a][c]+fmax[(a+c-1)%n+1][b-c]+sum[a][b])

fmax[a][b]=fmax[a][c]+fmax[(a+c-1)%n+1][b-c]+sum[a][b];

}

}

int max=-maxlongint,min=maxlongint;

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

{

if(fmax[a][n]>max)

max=fmax[a][n];

if(fmin[a][n]<min)

min=fmin[a][n];

}

printf("%d\n%d",min,max);

return 0;

}

查看更多回复
提交回复