NOI-Openjudge-8462-大盗阿福

8462:大盗阿福 总时间限制: 1000ms 内存限制: 65536kB 描述 阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。 作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金? 输入 输入的第一行是一个整数 T (T <= 50) ,表示一共有 T 组数据。接下来的每组数据,第一行是一个整数 N (1 <= N <= 100, 000) ,表示一共有 N 家店铺。第二行是 N 个被空格分开的正整数,表示每一家店铺中的现金数量。每家店铺中的现金数量均不超过 1000 。 输出 对于每组数据,输出一行。该行包含一个整数,表示阿福在不惊动警察的情况下可以得到的现金数量。 样例输入 2 3 1 8 2 4 10 7 6 14 样例输出 8 24 程序:

#include <stdio.h>

#include <math.h>

#include <algorithm>

#include <string.h>

using namespace std;

int t,n,a[1000001],f[1000001],maxn;

int main()

{ scanf("%d",&t);

for(int i=1;i<=t;i++)

{ scanf("%d",&n);

for(int j=1;j<=n;j++)

scanf("%d",&f[j]); a[1]=f[1];

for(int j=2;j<=n;j++)

a[j]=max(f[j]+a[j-2],a[j-1]);

printf("%d\n",a[n]>a[n-1]?a[n]:a[n-1]);

memset(a,0,sizeof(a));

memset(f,0,sizeof(f));

}

return ;

缩进没注意,请多原谅。 题目就是说你要去一条街上偷东西,而如果你连续偷了两家相邻的警察就会来,所以你要在不惊动警察的情况下偷得最多的钱。 题目会给你一个T,表示一共有T组数据,接下来就是T行,分别是每组数据,会给你一个N表示有N家店铺,对于每组数据输出一个最优解。 我先来解释一下样例: 输入两组数据第一组为1 8 2,可以偷的为8或1+2=3,而我们又要最优解所以输出8。 第二组输入 10 7 6 14,可以偷的为10、7、6、14、10+6=16、7+14=21、10+14=24.根据题意输出24. 接下来看程序 这道题是一道简单的动态规划。首先,输入数据,我们用数组a来存放最优解,数组f来存放数据,j从2开始一直循环到n,去寻找每个店铺的最优解,就是去寻找每个店铺的最优解,分段去决策,当我们得到了a[2]的最优解后,就可以去寻找a[3]的最优解,而每个阶段所作的决策,都会去影响以后的发展。最后,我们在第n个决策,和第n-1个决策里寻找最优解,然后输出。

这道题本来只是一道水题,所以讲的有问题的地方请在私信里指出。

NOI-Openjudge-8462

时间: 2024-11-15 13:26:34

NOI-Openjudge-8462-大盗阿福的相关文章

大盗阿福(动规)

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

001:大盗阿福

001:大盗阿福 题目链接:http://cxsjsxmooc.openjudge.cn/2017t2summerfinal/001/ 总时间限制: 1000ms 内存限制: 65536kB 描述 阿福是一名经验丰富的大盗.趁着月黑风高,阿福打算今晚洗劫一条街上的店铺. 这条街上一共有 N 家店铺,每家店中都有一些现金.阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至. 作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃.他想知道,在不惊

2971 抓住那头牛 noi.openjudge

http://noi.openjudge.cn/ch0205/2971/ 总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次移动花费一分钟 2.从X移动到2*X,每次移动花费一分钟 假设牛没有意识到农夫的行动,站在原地不动.农夫最少要花多少时间才能抓住牛? 输入 两个整数

noi openjudge 1768:最大子矩阵

http://noi.openjudge.cn/ch0406/1768/ 描述已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2 的最大子矩阵是 9 2-4 1-1 8 这个子矩阵的大小是15.输入输入是一个N * N的矩阵.输入的第一行给出N (0 < N <= 100).再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从

大盗阿福

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

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

词典 (noi OpenJudge)

传送门:1806:词典 神奇的STL #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <sstream> using namespace std; string s, s1, s2, word; map <string, string> dic; int main() { while (getline (cin, s) &

noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= m <= 100.接下来n行,每行m个整数,表示图像的每个像素点灰度.相邻两个整数之间用单个空格隔开,每个元素均在0~255之间. 输出 m行,每行n个整数,为顺时针旋转90度后的图像.相邻两个整数之间用单个空格隔开. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 7 4 1 8 5

noi题库(noi.openjudge.cn) 1.11编程基础之二分查找T01、02、04

T01 查找最接近的元素 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000.第二行包含n个整数,为非降序列各元素.所有元素的大小均在0-1,000,000,000之间.第三行包含一个整数m,为要询问的给定值个数.1 <= m <= 10000.接下来m行,每行一个整数,为要询问最接近元素的给定值.所有给定值的大小均在0-1,000,000,000之间. 输出 m行,每行一个整数,为最接近相应给定值的元素

noi题库(noi.openjudge.cn) 3.9数据结构之C++STL T1——T2

T1 1806:词典 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行.每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开.而且在词典中不会有某个外语单词出现超过两次.词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词.输入中出现单词只包括小写字母,而且长度不会超过10.输出在输出中,你需要把