poj1183(dp)

水题dp问题

动态转移方程:

初始化:sum[1][1]=a[1][1];其余全为0

sum[i][j]=max(sum[i-1][j-1]+a[i][j],sum[i-1][j]+a[i][j]),这个的意思是根据图来的,把图好好看下,很容易就写出来了

第一次自己写的dp,纪念下……

 1 #include <iostream>
 2 
 3 using namespace std;
 4 int max(int a,int b)
 5 {
 6     return a>b?a:b;
 7 }
 8 int a[105][105];
 9 int sum[105][105];
10 int main()
11 {
12     int n;
13     cin>>n;
14     for(int i=1;i<=n;i++)
15     {
16         for(int j=1;j<=i;j++)
17         {
18             cin>>a[i][j];
19         }
20     }
21     sum[1][1]=a[1][1];
22     for(int i=2;i<=n;i++)
23     {
24         for(int j=1;j<=n;j++)
25         sum[i][j]=max(sum[i-1][j-1]+a[i][j],sum[i-1][j]+a[i][j]);
26     }
27     int ans=sum[n][1];
28     for(int i=2;i<=n;i++)
29     {
30         if(sum[n][i]>ans)
31         {
32             ans=sum[n][i];
33         }
34     }
35     cout<<ans<<endl;
36     return 0;
37 }

嗯,继续

posted on 2012-08-17 22:58  矮人狙击手!  阅读(192)  评论(0编辑  收藏  举报

导航