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种状态:

  1. 聚精会神听老师讲课:这种情况下TheBeet能获取所有老师讲的内容,但是每分钟消耗3点精力。
  2. 趴在桌子上听老师讲课:这种情况下TheBeet能获取50%老师讲的内容,每分钟消耗1点精力。
  3. 发呆:这种情况下TheBeet什么也听不进去,但是也不消耗精力。
  4. 打瞌睡:瞌睡的第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 1

Sample Output

1750

HINT

  样例的解释:

  TheBeet先睡4分钟,从中获得6点精力,此时共有16点精力。然后认真听5分钟和趴桌子上听1分钟,获得550内容。此时精力为0。然后睡9分钟,获得36点精力,然后当老师在讲100内容的东西时认真听一下,其余时间发呆,最后共获得1750点内容。

Source

厦门大学第五届程序设计竞赛 第一次网络预赛 @ TheBeet

[ Submit][ Status][ Web Board]

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1056

题目大意:

  一个人有m的精力值,一节课45分钟,第i分钟有个价值a[i],有几种策略,求最大能获得多少价值?

  1. 聚精会神听老师讲课:这种情况下TheBeet能获取所有老师讲的内容,但是每分钟消耗3点精力。
  2. 趴在桌子上听老师讲课:这种情况下TheBeet能获取50%老师讲的内容,每分钟消耗1点精力。
  3. 发呆:这种情况下TheBeet什么也听不进去,但是也不消耗精力。
  4. 打瞌睡:瞌睡的第i分钟TheBeet回复i-1点精力。简单说就是说TheBeet打了一个k分钟的瞌睡后,会回复(k-1)*k/2点精力。另外每个瞌睡长度必须要大于等于3分钟。

  

题目思路:

  【动态规划】

  设f[i][j]表示前i分钟拥有精力值为j的最大价值。(注意由于睡觉可以回复精力所以不能只枚举到m,45分钟如果都认真听消耗不会超过150精力,所以我枚举到m+150,其实可以更小)

  可以根据四种策略得到四种状态转移。一次求解即可,最后解在f[n]中最大的。

  注意边界条件~

/****************************************************Author : CoolxxxCopyright 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-8;
const int J=10;
const int MOD=100000007;
const int MAX=0x7f7f7f7f;
const double PI=3.14159265358979323;
const int N=54;
const int M=1504;
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_JUDGEfreopen("1.txt","r",stdin);
//  freopen("2.txt","w",stdout);#endifint 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=45;for(i=1;i<=n;i++){scanf("%d",&a[i]);a[i]*=10;}for(i=0;i<=m+150;i++)f[0][i]=-1e8;f[0][m]=0;for(i=1;i<=n;i++){for(j=0;j<=m+150;j++){f[i][j]=f[i-1][j];if(j+3<=m+150)f[i][j]=max(f[i][j],f[i-1][j+3]+a[i]);if(j+1<=m+150)f[i][j]=max(f[i][j],f[i-1][j+1]+0.5*a[i]);for(k=3;k<=i && j>=(k*k-k)/2;k++)f[i][j]=max(f[i][j],f[i-k][j-(k*k-k)/2]);}}for(i=0;i<=m+150;i++)anss=max(anss,f[n][i]);ans=int(anss);if(ans%10>=5)ans+=10;printf("%d\n",ans/10);}return 0;
}
/*
////
*/

XMU 1056 瞌睡 vs 听课 【动态规划】相关推荐

  1. pku,zju题目分类

    哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客]   ural pku Zju 题目分类 收藏   感谢 mugu 的提供.... Ural Problem ...

  2. 【动态规划】XMU 1028 Game Boy Advance

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1028 题目大意: 求01背包最优解的方案.物件数和物件编号. 题目思路: [动态规划] ...

  3. 【动态规划】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 ...

  4. 1038 01背包动态规划

    #1038 : 01背包 #include <iostream> #include <stdio.h> #include <algorithm>using name ...

  5. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM 最早听说ACM/ICP ...

  6. 动态规划系列之六01背包问题

    法外狂徒张三是一个探险家,有一次巧合之下进入到一个有宝藏的洞穴里.这个洞穴有很多个不重复的宝贝,同时每个宝贝的重量也不一样.具体来说有: A 重 2 价值为 2 B 重 3 价值为 6 C 重 4 价 ...

  7. 伍六七带你学算法 动态规划 ——不同路径

    力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格 ...

  8. 由动态规划计算编辑距离引发的思考

    简单介绍 编辑距离算法: https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the- ...

  9. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

最新文章

  1. 【直播】鱼佬:数据挖掘师之路(河北高校数据挖掘邀请赛)
  2. 【Arduino基础教程】FSR402力敏电阻器
  3. proxool+spring 数据池连接相关注意点
  4. AOP实践--利用MVC5 Filter实现登录状态判断
  5. 内联函数有什么优点?内联函数与宏定义的区别?
  6. [BUUCTF-pwn]——jarvisoj_test_your_memory
  7. 飞鸽传书不能用?这里列出所有解决方法!
  8. 大话重构连载9:大布局你伤不起
  9. Servlet 客户端 HTTP 请求
  10. 使用SQL Server数据工具和Visual Studio Online进行连续部署
  11. python统计文本单词总数_python统计文本文件内单词数量的方法
  12. 「我们的首要之务,并不是遥望模糊的远方,而是专心处理眼前的事务。」---这是卡内基先生所强调的克服忧虑、开创人生的关键。...
  13. 前端调用3dmax模型转换.gltf格式
  14. linux根文件系统制作
  15. 2021-09-07218. 天际线问题
  16. laravel文件命名规范
  17. 聊聊在小米实习的日子
  18. SourceTree 删除记住的账户
  19. mac电脑循环次数多少算新_mac电池循环次数怎么计算?新版mac怎么查看剩余电量?...
  20. (转)深入详细理解矩阵 (矩阵的加减乘、转置、共轭、共轭转置)

热门文章

  1. freemarker 导出pdf特殊字符处理
  2. 为什么要进行数据库分区
  3. 基于OpenCV实现将视频转化为图片且可设定每秒转化帧数
  4. 【linux/makefile】-D_REENTRANT编译选项的作用
  5. 缓慢变化维度(SCD)
  6. 二次剩余(学习笔记)
  7. Java用户登陆界面例子 代码
  8. golang数据结构初探之字符串string
  9. Axure学习——页面跳转
  10. Django + python之语音转文字/小程序(语音搜索用)