POJ3176(DP)

来源:互联网 发布:sqlserver 删除表约束 编辑:程序博客网 时间:2024/06/09 20:16

大意:例

    7        3   8      8   1   0    2   7   4   4  4   5   2   6   5

从上往下只能往左边或右边走,求沿途数字最大和。

分析:最简单的DP

代码

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int num[360][360];int dp[360][360];int main(){    //freopen("C:\\in.txt","r",stdin);    int n,maxn=0;    scanf("%d",&n);    for(int i=0;i<n;i++)        for(int j=0;j<=i;j++)        scanf("%d",&num[i][j]);    dp[0][0]=num[0][0];    for(int i=1;i<n;i++)         for(int j=0;j<=i;j++)        {            if(j==0)            dp[i][j]=dp[i-1][j]+num[i][j];            else if(j==i)            dp[i][j]=dp[i-1][j-1]+num[i][j];            else            dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+num[i][j];        }    for(int i=0;i<n;i++)        if(dp[n-1][i]>=maxn)          maxn=dp[n-1][i];    cout<<maxn<<endl;   // fclose(stdin);    return 0;}


0 0
原创粉丝点击