码迷,mamicode.com
首页 > 其他好文 > 详细

UVALive 6510 Stickers

时间:2015-07-20 16:43:55      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:dp

这道题当时没有写题解,这算是一个水dp吧
就给你一个2*n的格子,然后不能取相邻的边的邮票
那么当前的转台只能从自己的前面的左上角和左上角的左面一个格子推出来,最后求第一行和第二行得到的最大值

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int dp[2][111111];
int a[2][111111];
int n;

int main (){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        for(int j=0;j<=1;j++)
        for(int i=1;i<=n;i++){
            scanf("%d",&a[j][i]);
        }

        memset(dp,0,sizeof(dp));
        dp[0][1]=a[0][1];
        dp[1][1]=a[1][1];
        a[0][0]=0;
        a[1][0]=0;
        for(int i=2;i<=n;i++){
            dp[1][i]=max(dp[1][i],dp[0][i-1]+a[1][i]);
            dp[1][i]=max(dp[1][i],dp[0][i-2]+a[1][i]);
            dp[0][i]=max(dp[0][i],dp[1][i-1]+a[0][i]);
            dp[0][i]=max(dp[0][i],dp[1][i-2]+a[0][i]);
        }

        printf("%d\n",max(dp[0][n],dp[1][n]));
    }
}

版权声明:都是兄弟,请随意转载,请注明兄弟是谁

UVALive 6510 Stickers

标签:dp

原文地址:http://blog.csdn.net/u013076044/article/details/46967671

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!