动态规划的入门题。。。有两种做法,一种从上往下推,一种从下往上推
Code
从上往下
#include<iostream>
#include<cstdio>
#define sco 2000
using namespace std;
int n,ans,d[sco][sco],a[sco][sco];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
for(int j=1;j<=i;++j){
scanf("%d",&a[i][j]);
}
}
d[1][1]=a[1][1];
for(int i=2;i<=n;++i){
for(int j=1;j<=i;++j){
d[i][j]=max(d[i-1][j],d[i-1][j-1])+a[i][j];
}
}
for(int i=1;i<=n;++i) ans=max(ans,d[n][i]);
printf("%d",ans);
return 0;
}
从下往上
#include<iostream>
#include<cstdio>
#define sco 2000
using namespace std;
int n,d[sco][sco],a[sco][sco];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
for(int j=1;j<=i;++j){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=n;++i) d[n][i]=a[n][i];
for(int i=n-1;i>=1;--i){
for(int j=1;j<=i;++j){
d[i][j]=max(d[i+1][j],d[i+1][j+1])+a[i][j];
}
}
printf("%d",d[1][1]);
return 0;
}