SP283 NAPTIME - Naptime

题意:

在某个星球上,一天由N小时构成。我们称0-1点为第一个小时,1-2点为第二个小时,以此类推。在第i个小时睡觉能恢复Ui点体力。在这座星球上住着一头牛,它每天要休息B个小时,它休息的这B个小时可以不连续,可以分成若干段,但是在每一段的第一个小时不能恢复体力,从第二个小时开始才可以恢复体力。 为了身体健康,这头牛希望遵循生物钟,每天采用相同的睡觉计划。另外,因为时间是连续的,每天的第N个小时与下一天的第一个小时是相连的,这头牛只需要在N个小时内休息B个小时就够了。 请你给这头牛安排一个任务计划,使得它每天恢复的体力最多。

输入格式: 第一行一个整数T表示有T组测试数据 对于每一组测试数据,第一行为两个整数N与B,接下来N行每行一个整数Ui。(2 <= B < N <= 3830 , 0 <= Ui <= 200000)

输出格式: 对于每组输入数据,对应一行输出一个整数,表示答案。(注意:两组输出之间没有空行)

我们可以发现一些很显然的性质:如果第一小时的体力值能够恢复,当且仅当第n小时和第一小时都在睡觉,然而我们并不确定第n小时究竟是不是睡觉,所以就不知道应该怎样给第一天初始值了,但是如果我们将这一限制去除,那么无论第n小时在不在睡觉第一小时都不会回复体力值,这样就可以进行第一次的dp,但是样就会出现一个问题,如果第一小时和第n小时都在睡觉,那么就会少U[1]点体力值,这样的话我们就可以强制令第一小时和第n小时都在睡觉,再进行一次dp并且把U[1]加进去,两次dp取最大值,就是答案了。

 #include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<stack>
#include<queue>
#define maxn 4005
using namespace std; inline int read()
{
char c=getchar();
int x=,res=;
while(c<''||c>'')
{
if(c=='-')
x=-;
c=getchar();
}
while(c>=''&&c<='')
{
res=res*+(c-'');
c=getchar();
}
return x*res;
} int t,n,m,ans;
int a[maxn];
int f[maxn][maxn][],dp[maxn][maxn][]; int main()
{
t=read();
while(t--)
{
ans=;
n=read();m=read();
for(int i=;i<=n;i++)
{
a[i]=read();
}
memset(f,-0x3f,sizeof(f));
f[][][]=;f[][][]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(j>) f[i][j][]=max(f[i-][j-][],f[i-][j-][]+a[i]);
f[i][j][]=max(f[i-][j][],f[i-][j][]);
}
}
ans=max(f[n][m][],f[n][m][]);
memset(f,-0x3f,sizeof(f));
f[][][]=a[];
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(j>) f[i][j][]=max(f[i-][j-][],f[i-][j-][]+a[i]);
f[i][j][]=max(f[i-][j][],f[i-][j][]);
}
}
ans=max(ans,f[n][m][]);
printf("%d\n",ans);
}
return ;
}

SP283 NAPTIME - Naptime的更多相关文章

  1. 【洛谷 SP283】NAPTIME - Naptime(DP)

    题目链接 先考虑如果只有一天,那么该怎么做. 设\(f[i][j][1]\)表示前\(i\)个小时睡了\(j\)个小时并且第\(j\)个小时正在睡觉时的最大体力,\(f[i][j][1]\)表示前\( ...

  2. $Poj2228$/洛谷$SP283\ Naptime$ 环形$DP$

    Luogu 一定要记得初始化为-inf!!! Description 在某个星球上,一天由N小时构成.我们称0-1点为第一个小时,1-2点为第二个小时,以此类推.在第i个小时睡觉能恢复Ui点体力.在这 ...

  3. DP百题练(二)

    目录 DP百题练(二) 区间 DP NOI1995 石子合并 IOI1998 Polygon CH5302 金字塔 USACO06FEB Treats for the Cows G/S LG1043 ...

  4. Timeout watchdog using a standby thread

    http://codereview.stackexchange.com/questions/84697/timeout-watchdog-using-a-standby-thread he simpl ...

  5. poj2228 Naptime【(环结构)线性DP】

    Naptime Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:3374   Accepted: 1281 Descriptio ...

  6. poj 2228 Naptime(DP的后效性处理)

    \(Naptime\) \(solution:\) 这道题不做多讲,它和很多区间DP的套路一致,但是这一道题它不允许断环成链,会超时.但是我们发现如果这只奶牛跨夜休息那么它在不跨夜的二十四个小时里一定 ...

  7. naptime

    naptime 有一个长度为n的序列\(a_i\),首尾相接组成了一个环,现在要在这个环上选出若干个区间,使区间长度之和恰好为b,然后忽略区间的顺时针开头元素,权值累加区间中所有的数字,问权值的最大值 ...

  8. [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)

    题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...

  9. BZOJ1737 [Usaco2005 jan]Naptime 午睡时间

    断环然后裸DP就好了... $f[i][j][k]$表示1号时间段没有被算入答案,到了第$i$个时间段,一共选了$j$个时间段,$k = 0 /1$表示第i个时间段有没有被算进答案的最优值 $g[i] ...

随机推荐

  1. Session与Cookie(自定义Session)

    一.会话管理 会话管理: 管理浏览器客户端 和 服务器端之间会话过程中产生的会话数据. 域对象: 实现资源之间的数据共享. request域对象 context域对象 会话技术: Cookie技术:会 ...

  2. ES6 对象增强

    对象字面量语法扩展: 1, 属性初始化语法简写:给一个属性赋一个变量值,如果变量名和属性名相同,可以省略变量名和冒号,直接写属性名,js引擎在执行代码的时候,自动查找 和属性命名相同的变量并赋值. l ...

  3. ubuntu下面配置apache

    1.在这个目录下面修改这个文件 把那个注释了 2.在这个目录下面修改这个文件 把这个改为index的目录

  4. Windows Server 2012 蓝屏 Wpprecorder.sys 故障

    坑爹的园区昨天停电了,导致运行中的服务器中断,来电之后,其中有一台Windows 系统的服务无法运行了,接了个显示器,发现无法进入系统了,挂掉了,这下可完蛋了,虽然做了Radio 磁盘阵列,数据不会丢 ...

  5. P1462 通往奥格瑞玛的道路 (二分+最短路)

    题目 P1462 通往奥格瑞玛的道路 给定\(n\)个点\(m\)条边,每个点上都有点权\(f[i]\),每条边上有边权,找一条道路,使边权和小于给定的数\(b\),并使最大点权最小. 解析 二分一下 ...

  6. Celery

    在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务.比如,在 Web 开发中,对新用户的注册,我们通常会给他发一封激活邮件,而发邮件是 ...

  7. fiddler和手机连接抓包实现

    很好用的抓包工具,不需要手机usb连接就可以抓包,查找bug超方便 实现方法: 借鉴跳转 手机版本:andriod 7.1.1 上面的方法的基础上遇到的问题: 在浏览器下载下来证书后始终无法打开(或许 ...

  8. 快速掌握Nginx(三) —— Nginx+Systemd托管netcore应用

    以前dotnet web应用程序开发完成后,我们都是使用IIS部署在Windows Server上,如今netcore技术发展迅速,因为其跨平台的特性,将dotnet web应用程序部署在更方便部署和 ...

  9. 解决beego1.12新版本没有log.info

    去https://github.com/astaxie/beego/中,找到旧的版本下载其log.go 至本地beego目录中

  10. numpy&pandas补充常用示例

    Numpy [数组切片] In [115]: a = np.arange(12).reshape((3,4)) In [116]: a Out[116]: array([[ 0, 1, 2, 3], ...