标签:
1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
30简单题意:正如上面说的,这是一个及其简单的DP题目。解题思路形成过程:这大概是很简单DP了吧。输入,处理,然后输出。设置一个max函数,从下到上比较,与其有关联的f[i+1][j],与f[i+1][j+1]中选出较大的值,加上当前值,最终得到结果。感想:熟能生巧。AC代码:#include <iostream> #include<cstdio> /*int Max(int i,int j) { int s1,s2; if(i>n||j>i) return -1; s1=Max(i+1,j)+triangle[i,j]; s2=Max(i+1,j+1)+triangle[i,j]; if(s1>s2) return s1; else return s2; }*/ const int M=1000+5; int f[M][M],a[M][M]; inline int max(int x,int y){ return x<y?y:x; } using namespace std; int main() { int i,j,k,n,c; cin>>c; for(k=0;k<c;k++) { while(scanf("%d",&n)==1){ for(i=1;i<=n;i++) for(j=1;j<=i;j++) scanf("%d",&a[i][j]); for(j=1;j<=n;j++) f[n][j]=a[n][j]; for(i=n-1;i>=1;i--) for(j=1;j<=i;j++) f[i][j]=a[i][j]+max(f[i+1][j],f[i+1][j+1]); printf("%d\n",f[1][1]); } } return 0; }
标签:
原文地址:http://blog.csdn.net/tansanity/article/details/51335141