Sicily/1345. 能量项链
2011-08-15 18:24 Min·zc 阅读(493) 评论(0) 编辑 收藏 举报
1 #include <iostream>
2 #include <memory.h>
3 using namespace std;
4 int num[300];
5 long ans[310][310];
6 int main()
7 {
8 int n;
9 while(cin>>n)
10 {
11 for(int i=1;i<=n;i++)
12 {
13 cin>>num[i];
14 num[i+n]=num[i];
15 }
16 memset(ans,0,sizeof(ans));
17 for(int k=2;k<=n;k++)
18 for(int i=1;i<=2*n;i++) //之前写的n,结果wa了很多次,后来发现需要计算到2n才可以,否则当j+1>n时的num值就是没有计算过的,所以得出的结果就是错误的
19 {
20 int t=i+k-1;
21 for(int j=i;j<t;j++)
22 if(ans[i][t]<ans[i][j]+ans[j+1][t]+num[i]*num[j+1]*num[t+1])
23 ans[i][t]=ans[i][j]+ans[j+1][t]+num[i]*num[j+1]*num[t+1];
24 }
25 int final=0;
26 for(int i=1;i<=n;i++)
27 if(final<ans[i][i+n-1])
28 final=ans[i][i+n-1];
29 cout<<final<<endl;
30
31 }
32 }
2 #include <memory.h>
3 using namespace std;
4 int num[300];
5 long ans[310][310];
6 int main()
7 {
8 int n;
9 while(cin>>n)
10 {
11 for(int i=1;i<=n;i++)
12 {
13 cin>>num[i];
14 num[i+n]=num[i];
15 }
16 memset(ans,0,sizeof(ans));
17 for(int k=2;k<=n;k++)
18 for(int i=1;i<=2*n;i++) //之前写的n,结果wa了很多次,后来发现需要计算到2n才可以,否则当j+1>n时的num值就是没有计算过的,所以得出的结果就是错误的
19 {
20 int t=i+k-1;
21 for(int j=i;j<t;j++)
22 if(ans[i][t]<ans[i][j]+ans[j+1][t]+num[i]*num[j+1]*num[t+1])
23 ans[i][t]=ans[i][j]+ans[j+1][t]+num[i]*num[j+1]*num[t+1];
24 }
25 int final=0;
26 for(int i=1;i<=n;i++)
27 if(final<ans[i][i+n-1])
28 final=ans[i][i+n-1];
29 cout<<final<<endl;
30
31 }
32 }