今天翻师妹的博客,看到几篇不错的文章就打算转载一下,这是一道DP题,我自己先去做了一遍,虽然和她的思想有些出入,但还是AC了,看完文章还是有收益的
传送门 : http://blog.csdn.net/qq_37672099/article/details/76577045
自己的代码
从上向下依次DP
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; #define LL long long #define read(a) scanf("%d",&a) int n; int dp[200][200]; int a[200][200]; int main() { while(~read(n)) { memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { read(a[i][j]); dp[i][j]=a[i][j]; if(i>1) { if(j==1) { dp[i][j]+=dp[i-1][j]; } else if(j==i) { dp[i][j]+=dp[i-1][j-1]; } else { dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]); } } } } int maxn=0; for(int i=1;i<=n;i++) { if(dp[n][i]>maxn) maxn=dp[n][i]; } printf("%d\n",maxn); } return 0; }