XMU 1056 瞌睡 vs 听课 【动态规划】
1056: 瞌睡 vs 听课
Time Limit: 500 MS Memory Limit: 64 MB
Submit: 19 Solved: 6
[Submit][Status][Web Board]Description
最近TheBeet为了准备校赛的题目,忙得没日没夜的。结果导致睡眠不足,第二天上课打瞌睡。
老师每分钟讲的东西都很重要,打瞌睡的话肯定会漏掉老师讲的很多内容。好在TheBeet事先看过书,知道这节课大致会讲什么内容,他知道老师第i分钟讲的内容量为Vi。现在TheBeet必须用自己现有的精力去听更多的内容。
已知TheBeet每分钟有4种状态:
- 聚精会神听老师讲课:这种情况下TheBeet能获取所有老师讲的内容,但是每分钟消耗3点精力。
- 趴在桌子上听老师讲课:这种情况下TheBeet能获取50%老师讲的内容,每分钟消耗1点精力。
- 发呆:这种情况下TheBeet什么也听不进去,但是也不消耗精力。
- 打瞌睡:瞌睡的第i分钟TheBeet回复i-1点精力。简单说就是说TheBeet打了一个k分钟的瞌睡后,会回复(k-1)*k/2点精力。另外每个瞌睡长度必须要大于等于3分钟。
TheBeet这节课刚开始时的精力为M点。过程中TheBeet必须保证自己的精力是大于等于0的。比如当TheBeet的精力等于2的时候,他就不能聚精会神听老师讲课了。现在您来告诉TheBeet,他这节课(一节课45分钟)能听的内容重要程度的总和最大为多少。
Input
输入的第一行为一个整数M(0<=M<=150),表示TheBeet这节课开始时候的精力。
接下来有45个正整数Vi(0<Vi<=100),用空格或换行隔开,表示这节课每分钟老师讲的内容量。Output
输出一个整数数字,表示TheBeet最多能听的多少内容。如果答案不是整数,请四舍五入。
Sample Input
10
100 100 100 100 100 100 100 100 100 100
1 1 1 1 1 1 1 1 1 100
1 100 1 100 1 100 1 100 1 100
1 100 1 100 1 100 1 100 1 100
1 1 100 1 1Sample Output
1750
HINT
样例的解释:
TheBeet先睡4分钟,从中获得6点精力,此时共有16点精力。然后认真听5分钟和趴桌子上听1分钟,获得550内容。此时精力为0。然后睡9分钟,获得36点精力,然后当老师在讲100内容的东西时认真听一下,其余时间发呆,最后共获得1750点内容。
Source
题目链接:
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1056
题目大意:
一个人有m的精力值,一节课45分钟,第i分钟有个价值a[i],有几种策略,求最大能获得多少价值?
- 聚精会神听老师讲课:这种情况下TheBeet能获取所有老师讲的内容,但是每分钟消耗3点精力。
- 趴在桌子上听老师讲课:这种情况下TheBeet能获取50%老师讲的内容,每分钟消耗1点精力。
- 发呆:这种情况下TheBeet什么也听不进去,但是也不消耗精力。
- 打瞌睡:瞌睡的第i分钟TheBeet回复i-1点精力。简单说就是说TheBeet打了一个k分钟的瞌睡后,会回复(k-1)*k/2点精力。另外每个瞌睡长度必须要大于等于3分钟。
题目思路:
【动态规划】
设f[i][j]表示前i分钟拥有精力值为j的最大价值。(注意由于睡觉可以回复精力所以不能只枚举到m,45分钟如果都认真听消耗不会超过150精力,所以我枚举到m+150,其实可以更小)
可以根据四种策略得到四种状态转移。一次求解即可,最后解在f[n]中最大的。
注意边界条件~
- /****************************************************
- Author : Coolxxx
- Copyright 2017 by Coolxxx. All rights reserved.
- BLOG : http://blog.csdn.net/u010568270
- ****************************************************/
- #include<bits/stdc++.h>
- #pragma comment(linker,"/STACK:1024000000,1024000000")
- #define abs(a) ((a)>0?(a):(-(a)))
- #define lowbit(a) (a&(-a))
- #define sqr(a) ((a)*(a))
- #define mem(a,b) memset(a,b,sizeof(a))
- const double EPS=1e-;
- const int J=;
- const int MOD=;
- const int MAX=0x7f7f7f7f;
- const double PI=3.14159265358979323;
- const int N=;
- const int M=;
- using namespace std;
- typedef long long LL;
- double anss;
- LL aans;
- int cas,cass;
- int n,m,lll,ans;
- int a[N];
- double f[N][M];
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("1.txt","r",stdin);
- // freopen("2.txt","w",stdout);
- #endif
- int i,j,k;
- int x,y,z;
- // for(scanf("%d",&cass);cass;cass--)
- // for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
- // while(~scanf("%s",s))
- while(~scanf("%d",&m))
- {
- n=;
- for(i=;i<=n;i++)
- {
- scanf("%d",&a[i]);
- a[i]*=;
- }
- for(i=;i<=m+;i++)
- f[][i]=-1e8;
- f[][m]=;
- for(i=;i<=n;i++)
- {
- for(j=;j<=m+;j++)
- {
- f[i][j]=f[i-][j];
- if(j+<=m+)f[i][j]=max(f[i][j],f[i-][j+]+a[i]);
- if(j+<=m+)f[i][j]=max(f[i][j],f[i-][j+]+0.5*a[i]);
- for(k=;k<=i && j>=(k*k-k)/;k++)
- f[i][j]=max(f[i][j],f[i-k][j-(k*k-k)/]);
- }
- }
- for(i=;i<=m+;i++)
- anss=max(anss,f[n][i]);
- ans=int(anss);
- if(ans%>=)ans+=;
- printf("%d\n",ans/);
- }
- return ;
- }
- /*
- //
- //
- */
XMU 1056 瞌睡 vs 听课 【动态规划】的更多相关文章
- 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...
- 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选 ...
- 【动态规划】XMU 1032 装配线问题
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1032 题目大意: 一个物品在2条生产线上加工,每条线上n(n<=1000)个节点 ...
- 【动态规划】HDU 1081 & XMU 1031 To the Max
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081 http://acm.xmu.edu.cn/JudgeOnline/problem.php?i ...
- 【动态规划】XMU 1030 苦恼的月下老人
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1030 题目大意: 给定两个字符串的长度和内容,求最长公共子序列. 题目思路: [动态规 ...
- 【动态规划】XMU 1029 矩阵链乘法
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1029 题目大意: 题同乘法难题.给n+1个数,头尾不能动,中间的数可取出,取出时代价是 ...
- 【动态规划】XMU 1028 Game Boy Advance
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1028 题目大意: 求01背包最优解的方案.物件数和物件编号. 题目思路: [动态规划] ...
- 【动态规划】XMU 1583 Sequence
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1583 题目大意: T组数据,对于n(n<=6000)给定序列Xn(Xn<= ...
- 【动态规划】XMU 1588 01序列计数
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1588 题目大意: 给n1个0和n2个1,连续的0不超过k1个,连续的1不超过k2个.问 ...
随机推荐
- selenium,phantomJS,python整合的一个小示例,把某个网页画面整体保存成图片格式。
本篇将使用selenium,phantomJS和python制作的一个示例,把某个网页整体保存为一个图片文件. 简单介绍下,selenium是一个开源的用于测试web程序的工具,当然,如果你要执行一些 ...
- c#导出word文档
为方便下次遇到不知道去哪找先把它存放在这里,以下是保存导出word主要类方法 public class BiultReportForm { /// <summary>word 应用对象 & ...
- Boolean.valueOf("true")的用法
Boolean.valueOf(a);a为true时返回true不管大小写,a为其他值时都返回false:
- XTU 二分图和网络流 练习题 J. Drainage Ditches
J. Drainage Ditches Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Ja ...
- 使用HttpWebRequest post数据时要注意UrlEncode
今天在用HttpWebResponse类向一个远程页面post数据时,遇到了一个怪问题:通过对比自己post的参数和服务器接收到的值,发现参数中的一个+号被替换成了空格. 造成这个错误的原因在于+号在 ...
- Java有几种线程池?
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程newFixed ...
- 动态规划:HDU1087Super Jumping! Jumping! Jumping!(最大上升和)
Problem Description Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very ...
- 2017多校Round10(hdu6171~hdu6181)
补题进度:5/11 1001(双向BFS) 题意: 给你一个类似移子游戏,给你初始状态和终止状态,问初始状态到终止状态至少要移多少步,如果步数>20就-1 分析: 很明显的BFS了,不过普通的B ...
- java 读取数据库数据转化输出XML输出在jsp页面
因为老师实验报告要求,搭建服务端解析XML 下面代码实现转化XML格式也是在网上找的转化代码 输出在jsp页面以便于客户端解析是自己写的 一个类就解决了Test package tests; //三只 ...
- 【SDCC讲师专访】PingCAP联合创始人兼CEO刘奇:好的产品应开源,不闭门造车-CSDN.NET
[SDCC讲师专访]PingCAP联合创始人兼CEO刘奇:好的产品应开源,不闭门造车-CSDN.NET 小米的Themis