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

[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 : 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 听课 【动态规划】的更多相关文章

  1. 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...

  2. 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选 ...

  3. 【动态规划】XMU 1032 装配线问题

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1032 题目大意: 一个物品在2条生产线上加工,每条线上n(n<=1000)个节点 ...

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

  5. 【动态规划】XMU 1030 苦恼的月下老人

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1030 题目大意: 给定两个字符串的长度和内容,求最长公共子序列. 题目思路: [动态规 ...

  6. 【动态规划】XMU 1029 矩阵链乘法

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1029 题目大意: 题同乘法难题.给n+1个数,头尾不能动,中间的数可取出,取出时代价是 ...

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

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

  8. 【动态规划】XMU 1583 Sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1583 题目大意: T组数据,对于n(n<=6000)给定序列Xn(Xn<= ...

  9. 【动态规划】XMU 1588 01序列计数

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1588 题目大意: 给n1个0和n2个1,连续的0不超过k1个,连续的1不超过k2个.问 ...

随机推荐

  1. 洛谷P1016 旅行家的预算

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  2. idea与eclipse项目相互导入的过程

    idea项目导出到桌面 很简单,直接去项目所在目录考出即可,但是考出的项目往往都特别大,这是因为考出之前  我们不要忘记把idea的输出目录删除 每次启动服务器运行idea项目的时候  都会有一个输出 ...

  3. POJ 1017 Packet

    http://poj.org/problem?id=1017 有1*1 2*2...6*6的物品 要装在 6*6的parcel中 问最少用多少个parcel 一直没有找到贪心的策略 问题应该出现在 总 ...

  4. 【BZOJ1717&POJ3261】Milk Patterns(后缀数组,二分)

    题意:求字符串的可重叠的k次最长重复子串 n<=20000 a[i]<=1000000 思路:后缀数组+二分答案x,根据height分组,每组之间的height>=x 因为可以重叠, ...

  5. 从零开始写STL—哈希表

    static const int _stl_num_primes = 28; template<typename T, typename Hash = xhash<T>> cl ...

  6. Codeforces 618C(计算几何)

    C. Constellation time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  7. [bzoj2595][WC2008]游览计划/[bzoj5180][Baltic2016]Cities_斯坦纳树

    游览计划 bzoj-2595 wc-2008 题目大意:题目链接.题目连接. 注释:略. 想法:裸题求斯坦纳树. 斯坦纳树有两种转移方式,设$f[s][i]$表示联通状态为$s$,以$i$为根的最小代 ...

  8. Intersection--poj1410(判断线段与矩形的关系)

    http://poj.org/problem?id=1410 题目大意:给你一个线段和矩形的对角两点  如果相交就输出'T'  不想交就是'F' 注意: 1,给的矩形有可能不是左上 右下  所以要先判 ...

  9. SVN 学习笔记-高级操作

    所谓高级操作,只是曲高和寡,其实都不怎么用的.但是关键时候,可能会很有用. 这个高级只是针对基本操作而言.有些操作可能也是比较基本的. 清除锁 有时候我们在操作的时候,可能系统崩溃了,或者SVN非正常 ...

  10. win10安装mysql5.6,mysql启动时,闪退

    首先在服务中查看是不是mysql启动了 发现在服务中没有mysql服务, 然后找到mysql的安装目录 MYSQL SERVER 5.6 中将my-default.ini 改为my.ini 使用命令行 ...