F-Monkey Banana Banana

这道题第一个是数据的输入要注意,然后我最开始做的时候想着要不每排进行排序,然后取最大的,相加,但是是wrong anwser,然后参考了一下其他人的代码,dp会好一点

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int dp[220][220],map[220][220];
int main()
{
    int T,n,j,k,i,cas=1;
    cin>>T;
    while(T--)
    {
        cin>>n;
        memset(map,0,sizeof(map));
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=i;j++)
                cin>>map[i][j];
        }
        k=n-1;
        for(i=n+1;i<2*n;i++,k--)
        {
            for(j=1;j<=k;j++)
                cin>>map[i][j];
        }

        for(i=1;i<=n;i++)
        {
            for(j=1;j<=i;j++)
            {
                dp[i][j]=map[i][j]+max(dp[i-1][j],dp[i-1][j-1]);
            }
        }

        k=n-1;
        for(i=n+1;i<2*n;i++,k--)
        {
            for(j=1;j<=k;j++)
                dp[i][j]=map[i][j]+max(dp[i-1][j],dp[i-1][j+1]);
        }
        printf("Case %d: %d\n",cas++,dp[2*n-1][1]);
    }
    return 0;
}

  

posted @ 2016-08-13 17:17  阿银家的小贰  阅读(139)  评论(0编辑  收藏  举报