lightoj1004【基础DP】

来源:互联网 发布:2016网络作家富豪榜 编辑:程序博客网 时间:2024/05/21 14:49

从低端到顶端求个最大值;

思路:

基础DP,递推

#include<cstdio>#include<queue>#include<map>#include<string>#include<string.h>#include<iostream>#include<algorithm>using namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const LL mod=1e9+7; int a[110][110];int dp[110][110]; int main(){    int T,cas=1;    int n;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        memset(a,0,sizeof(a));        for(int i=1;i<=2*n-1;i++)        {            if(i<=n)            {                for(int j=1;j<=i;j++)                    scanf("%d",&a[i][j]);            }            else            {                for(int j=1;j<=(2*n-i);j++)                    scanf("%d",&a[i][j]);            }        }        memset(dp,0,sizeof(dp));        dp[1][1]=a[1][1];        for(int i=1;i<=n;i++)            for(int j=1;j<=i;j++)                dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i-1][j-1]);        for(int i=n+1;i<=2*n-1;i++)            for(int j=1;j<=(2*n-i);j++)                dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i-1][j+1]);        printf("Case %d: ",cas++);        printf("%d\n",dp[2*n-1][1]);    }    return 0;}


0 0
原创粉丝点击