讨论 / 为何只有90?(C语言)
fangyue 2015-11-04 03:50:48
点我顶贴 收藏 删除
#include<stdio.h>

int weight[101],a[101][201],b[101][201],sum[201];

int dpc(int start,int last)

{

if(start==last)

return 0;

if(start+1==last)

{

a[start][last]=weight[start]+weight[last];

return a[start][last];

}

if(a[start][last]!=0)

return a[start][last];

int answer=0,i;

for(i=start;i<last;i++)

if( dpc(start,i)+dpc(i+1,last) > answer )

answer=dpc(start,i)+dpc(i+1,last);

a[start][last]=answer+sum[last]-sum[start-1];

return a[start][last];

}

int dpz(int start,int last)

{

if(start==last)

return 0;

if(start+1==last)

{

b[start][last]=weight[start]+weight[last];

return b[start][last];

}

if(b[start][last]!=0)

return b[start][last];

int answer=9999999,i;

for(i=start;i<last;i++)

if( dpz(start,i)+dpz(i+1,last) < answer )

answer=dpz(start,i)+dpz(i+1,last);

b[start][last]=answer+sum[last]-sum[start-1];

return b[start][last];

}

int main()

{

int n,i,ans_a=0,ans_b=9999999;

scanf("%d",&n);

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

{

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

weight[n+i]=weight[i];

}

sum[1]=weight[1];

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

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

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

if(ans_a<dpc(i,i+n-1))

ans_a=dpc(i,i+n-1);

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

if(ans_b>dpz(i,i+n-1))

ans_b=dpz(i,i+n-1);

printf("%d\n%d",ans_b,ans_a);

//for(;;);

return 0;

}

查看更多回复
提交回复