poj 3176
简单DP
#include<iostream> #include<algorithm> using namespace std; int max(int a,int b) { if(a<b)a=b; return a; } int main() { int i,M,m[351][351],j,a[351][351]; cin>>M; for(i=1;i<=M;i++) for(j=1;j<=i;j++) cin>>m[i][j]; for(i=0;i<M;i++) fill(a[i],a[i]+M,0); a[1][1]=m[1][1]; for(i=2;i<=M;i++) { for(j=1;j<=i;j++) { a[i][j]=max(a[i-1][j-1]+m[i][j],a[i-1][j]+m[i][j]); } } int max=0; for(i=1;i<=M;i++) if(max<a[M][i])max=a[M][i]; cout<<max<<endl; return 0; }

浙公网安备 33010602011771号