首页 > 其他 > 详细

zzuli-1739: DP(区间dp)

时间:2015-11-11 19:12:27      阅读:274      评论:0      收藏:0      [点我收藏+]

http://acm.zzuli.edu.cn/problem.php?id=1739

自家学校OJ上的题。

技术分享

一个区间dp和我上一篇博文写的区间dp基本上一样,

直接上状态转移方程dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j],dp[i][j]);

思路和上一篇基本一样,状态方程表达的意思也一样,具体参考上一篇。比较懒,不写了。。。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int N=1e7;
 4 typedef long long ll;
 5 int main(void)
 6 {
 7     int i,j,k,p,q,l;
 8     int a[105];
 9     int dp[110][110];
10     while(scanf("%d",&k)!=EOF)
11     {
12         for(i=1; i<=k; i++)
13         {
14             scanf("%d",&a[i]);
15         }
16         memset(dp,0,sizeof(dp));
17         for(i=3; i<=k; i++)
18         {
19             for(j=i-2; j>=1; j--)
20             {
21                 dp[i][j]=dp[i][i-1]+dp[i-1][j]+a[i]*a[i-1]*a[j];
22                 for(l=i-1; l>j; l--)
23                 {
24                     dp[i][j]=dp[i][j]<dp[i][l]+dp[l][j]+a[i]*a[l]*a[j]?dp[i][j]:dp[i][l]+dp[l][j]+a[i]*a[l]*a[j];
25 
26                 }
27             }
28         }
29         printf("%d\n",dp[k][1]);//因为两端不取,所以最后端点就是k和1;
30     }
31 return 0;
32 
33 
34 }

 

zzuli-1739: DP(区间dp)

原文:http://www.cnblogs.com/zzuli2sjy/p/4956835.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!