题目:数字三角形
思路:
dp+滚动数组优化。
f[i][j]表示走到第(i,j)的位置得到的最大数,滚动第一维。
转移方程:f[j]=max(f[j],f[j-1])+a[i][j]
注:这是一道IOI的题目…
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int ans=0;
int a[1005][1005]={0};
int f[1005]={0};
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++){
for(int j=i;j>=1;j--){
f[j]=max(f[j],f[j-1])+a[i][j];
}
}
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);
}
printf("%d",ans);
return 0;
}