大盗阿福1301

2024-04-12 09:20
文章标签 1301 阿福 大盗

本文主要是介绍大盗阿福1301,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1301:大盗阿福


时间限制: 1000 ms         内存限制: 65536 KB
提交数:13109    通过数: 6123

【题目描述】

阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。

这条街上一共有 N� 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。

作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?

【输入】

输入的第一行是一个整数T(T≤50)�(�≤50) ,表示一共有T组数据。

接下来的每组数据,第一行是一个整数N(1≤N≤100,000)�(1≤�≤100,000) ,表示一共有N�家店铺。第二行是N�个被空格分开的正整数,表示每一家店铺中的现金数量。每家店铺中的现金数量均不超过10001000。

【输出】

对于每组数据,输出一行。该行包含一个整数,表示阿福在不惊动警察的情况下可以得到的现金数量。

【输入样例】

2
3
1 8 2
4
10 7 6 14

【输出样例】

8
24

【提示】

对于第一组样例,阿福选择第22家店铺行窃,获得的现金数量为88。

对于第二组样例,阿福选择第11和44家店铺行窃,获得的现金数量为10+14=2410+14=24。

解题思路

关键是找到这题的递推方程,ans=max(dfs(x+2)+a[x],dfs(x+1));要么洗劫这家,然后考虑间隔的下家,要么洗劫下家。然后再记忆化搜索,不然会超时。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<math.h>
#include<iomanip>
#include<set>
#include<queue>
#include<stack> 
#include<map>
#include<list>
#include <stdlib.h>
#include<deque>
using namespace std;
int n, t, a[100005],ans,b[100005];//a是存每家店的现金,b是存洗劫前i家的最大收益
int dfs(int x)
{if (x > n){return 0;}else if (b[x] != 0){return b[x];}else{b[x]= max(dfs(x + 1), (dfs(x + 2) + a[x]));//把考虑到第i家前的情况全部存起来,免得再花大量时间去搜return b[x];}
}
int main()
{cin >> t;while (t--){cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];}ans=dfs(1);cout << ans << endl;memset(b, 0, sizeof(b));}
}

这篇关于大盗阿福1301的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896736

相关文章

hdu 1301 Jungle Roads (基础最小生成树)

题目:         链接:点击打开链接 题意:         对n个村庄之间的路进行修理, 然后是n-1行,每行的第一组数据时一个大写字母VIL和一个数K,Vil表示从这个村庄出发,K表示刚才的那个字母代表的村庄和其他村庄的路的数目,接下来在同一行是K组数据,每组是一个大写字母和一个数,大写字母表示和第一个村庄连接的村庄,数表示维修他们之间的路所需的费用。现在为了使维修费油最低,只需所

续航更进阶 长安马自达MAZDA EZ-6成功挑战1301公里续航

继在中国“热极”新疆吐鲁番完成高温试炼后,8月24日-26日,长安马自达MAZDA EZ-6(以下称EZ-6)“众测先享官—续航更进阶”再次从兰州出发,EZ-6增程车型以一次充电、一箱油(45L油箱)创造了CLTC工况1301公里的极限续航记录,实测百公里平均能耗3.6L,增程车型续航达成率超过100%。此前在吐鲁番高温环境下,EZ-6纯电600公里级车型在CLTC工况下同样成功突破100%续航达

【动态规划】【hard】力扣1301. 最大得分的路径数目

给你一个正方形字符数组 board ,你从数组最右下方的字符 ‘S’ 出发。 你的目标是到达数组最左上角的字符 ‘E’ ,数组剩余的部分为数字字符 1, 2, …, 9 或者障碍 ‘X’。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。 一条路径的 「得分」 定义为:路径上所有数字的和。 请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第

大盗阿福(信息学奥赛一本通-T1301)

【题目描述】 阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。 作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金? 【输入】 输入的第一行是一个整数T(

计蒜客 - T1227 大盗阿福

计蒜客 - T1227 大盗阿福 原题链接 思路 动态规划问题,dp[i]表示1~i家店铺抢劫可以获得的现金数的最大值,状态方程dp[i]=max(dp[i-1],dp[i-2]+a[i]);。划分第i家选与不选的情况,如果不选第i家,那么最大值就是dp[i-1],如果选第i家,因为是不能选相邻两家,那么最大值就是dp[i-2]+a[i],然后找到这两者的最大值。代码很简单,如下。 #in

【动态规划】1301. 最大得分的路径数目

作者推荐 【动态规划】【前缀和】【C++算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCoce1301. 最大得分的路径数目 给你一个正方形字符数组 board ,你从数组最右下方的字符 ‘S’ 出发。 你的目标是到达数组最左上角的字符 ‘E’ ,数组剩余的部分为数字字符 1, 2, …, 9 或者障碍 ‘X’。在每一步移动中,你可以向上、向左或者左上方移动,可以移

LintCode 1301. 生命游戏 JavaScript算法

描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 1、如果活细胞周围八个位置的活细胞数少于两个,则该位置活

python递归解决博物馆大盗问题

兄弟萌,话不多说,show me the code! # 初始化记忆表格m# key是(宝物组合,最大重量),value是最大价值m = {}def thief(tr,w):if tr==set() or w==0: # turple是key的要求m[(tuple(tr),w),w] = 0return 0elif (tuple(tr),w) in m:return m[(tuple(tr

1301:大盗阿福(史上最全题解,没有之一,3种解法各大优化齐上阵)

题目描述】 阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 NN 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。 作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金? 【输入】 输入的第一行是

编程训练————大盗阿福

大盗阿福 题目描述主要思路具体代码结果测试 题目描述 题目描述 阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 N家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,