GDOI - 2009 猴子 动态规划 重庆一中高2018级竞赛班第八次测试 2016.8.7 Problem 1
来源:互联网 发布:天猫app实时调研数据 编辑:程序博客网 时间:2024/05/10 07:33
【问题描述】
一只猴子找到了很多香蕉树,这些香蕉树都种在同一直线上,而猴子则在这排香蕉树的第一棵树上。这只猴子当然想吃尽量多的香蕉,但它又不想在地上走,只想从一棵树跳到另一棵树上.同时猴子的体力有限,它不能一次跳得太远或跳得次数太多,每当他跳到一棵树上,就会把那棵树上的香蕉都吃掉。那么,它最多能吃多少个香蕉呢?
【输入格式】
输入第一行为三个整数,分别是香蕉树的棵数N,猴子每次跳跃的最大距离D,最多跳跃次数M.
下面N行每行包括两个整数,ai,bi分别表示每棵香蕉树上的香蕉数,以及这棵树到猴子所在树的距离。输入保证这些树按照从近到远排列,并且没有两棵树在同一位置。b0总是为0.
【输出格式】
输出只有一行,包含一个整数,为猴子最多能吃到的香蕉数。
【输入样例】
5 5 26 08 34 56 79 10
【输出样例】
20
【数据范围】
ai<=10000,d<=10000
对于30%的数据,有M< N <=10,bi<=100
对于50%的数据,有M< N <=30,bi<=1000
对于100%的数据,有M< N <=100,bi<=10000
思路:求最大值一开始就想到了动态规划,但是我设的状态函数为f[i][j][k]:前i棵树,跳跃次数不超过j次,坐标不超过k时的最大值。记录坐标根本没什么用。
所以正解为f[i][j]:跳到第i棵树时跳跃了j次获得的最大值。若设为f[i][j]:跳跃i次到第j棵树上的最大值,还可使用滚动数组进行优化。
状态转移方程为:f[i][j]=max(f[i][j],f[i-1][k]+a[j]) (0<=k<=j-1 && b[j]-b[k]<=d)
/* Name: monkey.cpp Copyright: Twitter & Instagram @stevebieberjr Author: @stevebieberjr Date: 07/08/16 19:26*/#include<cstdio>#include<cstring>#include<algorithm>#define inf 0X3F3F3F3Fusing namespace std;int n,d,m;struct tree{ int a,b;}t[105];int f[2][105]; //跳跃i次到第j棵树上的最大值 int main(){ freopen("monkey.in","r",stdin); freopen("monkey.out","w",stdout); scanf("%d%d%d",&n,&d,&m); for(int i=1;i<=n;i++) { scanf("%d%d",&t[i].a,&t[i].b); } memset(f,-0X3F,sizeof(f)); for(int i=0;i<2;i++) { f[i%2][1]=t[1].a; } int ans=t[1].a; for(int i=1;i<=m;i++) { for(int j=2;j<=n;j++) { int T=-inf; for(int k=j-1;k>=0 && t[j].b-t[k].b<=d;k--) { T=max(T,f[(i-1)%2][k]+t[j].a); } f[i%2][j]=T; ans=max(ans,f[i%2][j]); } } printf("%d\n",ans); return 0;}
0 0
- GDOI - 2009 猴子 动态规划 重庆一中高2018级竞赛班第八次测试 2016.8.7 Problem 1
- NOIP 2010 - 提高组 乌龟棋 动态规划 重庆一中高2018级竞赛班第八次测试 2016.8.7 Problem 2
- CQBZOJ - 2916 学生宿舍 动态规划(DP) 重庆一中高2018级竞赛班第十次测试 2016.9.16 Problem 1
- 破译密码 动态规划 重庆一中高2018级竞赛班第十次测试 2016.9.16 Problem 3
- 复赛模拟试题 - 物品选取 动态规划(DP) 重庆一中高2018级竞赛班第七次测试 2016.8.4 Problem 3
- Vijos - 1037 搭建双塔 动态规划(DP) 重庆一中高2018级竞赛班第七次测试 2016.8.4 Problem 2
- POJ - 1328 Radar Installation 安装雷达 贪心+区间选点 重庆一中高2018级竞赛班第八次测试 2016.8.7 Problem 3
- NOIP 2003 - 普及组 乒乓球 模拟+“高级”水题 重庆一中高2018级竞赛班第八次测试 2016.8.7 Problem 4
- Vijos - 1060 盒子 递推+优化 重庆一中高2018级竞赛班第七次测试 2016.8.4 Problem 1
- Vijos - 1488 路灯的改建计划 动态规划 重庆一中高2018级竞赛班第九次测试 2016.9.10 Problem 3
- UVa - 1625 Color Length 颜色的长度 动态规划 重庆一中高2018级竞赛班第十次测试 2016.9.16 Problem 2
- OpenJudge - 2989 糖果 动态规划(DP) 重庆一中高2018级竞赛班第十一次测试 2016.9.24 Problem 2
- 旅行 贪心 重庆一中高2018级竞赛班第四次测试 2016.7.25 Problem 2
- BashuOJ - 4479 足球联赛 暴力 水题 重庆一中高2018级竞赛班第四次测试 2016.7.25 Problem 1
- 复赛模拟试题 - 盛夏的果实 SPFA(队列优化)+二分答案法 重庆一中高2018级竞赛班第七次测试 2016.8.4 Problem 4
- UVa - 1615 Highway 高速公路 贪心+区间选点 重庆一中高2018级竞赛班第五次测试 2016.7.26 Problem 1
- CQBZOJ - 2935 病毒分裂 分治算法+快速幂 重庆一中高2018级竞赛班第六次测试 2016.7.31 Problem 1
- OpenJudge - 2704 寻找平面上的极大点 贪心+使用map优化 重庆一中高2018级竞赛班第九次测试 2016.9.10 Problem 1
- Log4j
- 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
- for循环中的闭包问题及解决方案
- 九度OJ 1104 整除问题
- hdu 5794 2016 Multi-University Training Contest 6(鲁卡斯+容斥原理)
- GDOI - 2009 猴子 动态规划 重庆一中高2018级竞赛班第八次测试 2016.8.7 Problem 1
- Machine Learning All the exercises
- MySQL手册阅读整理
- 《关于文件同步的三篇博文学习》
- Fresco中的Okhttp模块
- 一名初学者对编程的理解
- AVFoundation Programming Guide(官方文档翻译1)About AVFoundation - AVFoundation概述
- 欢迎使用CSDN-markdown编辑器
- 纪念一下几年前的一道考试题