码迷,mamicode.com
首页 > 其他好文 > 详细

zzuli-1739: DP(区间dp)

时间:2015-11-11 19:13:16      阅读:181      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!