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 }
嗯,继续