大盗阿福 动态规划入门 dp

在这里插入图片描述
在这里插入图片描述

解题思路:他只有两种情况,就是间隔一个或间隔两个再洗劫。因为如果间隔三个那不如把中间的那家也洗劫掉。
所以:
sum[k] = sum[k]+max(sum[k-2],sum[k-3]);

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,t;
int main()
{
    scanf("%d",&t);
    for(int i=0;i<t;i++)
    {
        scanf("%d",&n);
        int sum[n+3];
        memset(sum,0,sizeof(sum));
        for(int j=3;j<=n+2;j++)			scanf(" %d",&sum[j]);
        
		for(int k=3;k<=n+2;k++){
          	sum[k] = sum[k]+max(sum[k-2],sum[k-3]);
        }
        printf("%d\n",max(sum[n+2],sum[n+1]));
    }
    return 0;
}

有帮助就点个赞啵,来手赞赏也是非常妙的
在这里插入图片描述

发布了13 篇原创文章 · 获赞 13 · 访问量 332

猜你喜欢

转载自blog.csdn.net/qq_43320728/article/details/104453749