poj之旅——3176

来源:互联网 发布:java base64转成图片 编辑:程序博客网 时间:2024/05/14 20:16

题目描述:金字塔形的保龄球中从顶往下撞击,每次只能撞击左下或右下两个,求所有撞到得分的最高值。



题解:极其基础的dp,f[i][j]=max(f[i-1][j-1],f[i-1][j])+map[i][j]


参考程序:

#include<cstdio>#include<algorithm>#define maxn 510using namespace std;int f[maxn][maxn],map[maxn][maxn];int main(){int n;scanf("%d\n%d",&n,&f[0][0]);for (int i=1;i<n;i++)for (int j=0;j<i+1;j++){scanf("%d",&map[i][j]);    if (i*j!=0)f[i][j]=max(f[i-1][j-1],f[i-1][j])+map[i][j];else f[i][j]=f[i-1][j]+map[i][j];}int ans=f[n-1][0];    for (int i=1;i<n;i++)ans=max(ans,f[n-1][i]);    printf("%d",ans);return 0;}


0 0
原创粉丝点击