题解

这题一眼望去DP。

发现自己太智障了。

这题想的是O(n^3m)的。

环形处理只会断环成链。。。。然后DP也想的不好。

我们先考虑如果除去环这题该怎么做?

dp[i][j][0/1]代表到第i小时睡了j个小时,第i小时睡了/没睡权值最大值。

初值

dp[1][1][1]=dp[1][0][0]=0;dp[i][0][0]=0;其余都是负无穷。

转移

dp[i][j][1]=max(dp[i-1][j-1][0],do[i-1[j-1][2]+w[i]);

dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j[1]);

目标

dp[n][m][1].dp[n][m][0];

然后考虑环,我们发现我们少考虑的只是第一个小时和上一天最后一个小时都睡觉的情况。

我们保证第一个小时和上一天最后一个小时都睡觉再做一次DP。

初值

dp[1][1][1]=a[1];dp[i][0][0]=0;其余都是负无穷。

转一样

目标

dp[n][m][1]];

这样我们做两次DP,就处理了环的情况。

注意这题空间比较少,滚一下就好了

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
const int INF=;
int n,m,a[N],dp[][N][],ans;
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
memset(dp,-,sizeof(dp));dp[][][]=dp[][][]=;
for(int i=;i<=n;i++){
dp[i&][][]=;
for(int j=;j<=min(m,i);j++){
dp[i&][j][]=max(dp[i&^][j-][]+a[i],dp[i&^][j-][]);
dp[i&][j][]=max(dp[i&^][j][],dp[i&^][j][]);
}
}
ans=max(dp[n&][m][],dp[n&][m][]);
memset(dp,-,sizeof(dp));dp[][][]=a[];
for(int i=;i<=n;i++){
dp[i&][][]=;
for(int j=;j<=min(m,i);j++){
dp[i&][j][]=max(dp[i&^][j-][]+a[i],dp[i&^][j-][]);
dp[i&][j][]=max(dp[i&^][j][],dp[i&^][j][]);
}
}
printf("%d",max(ans,dp[n&][m][]));
return ;
}

POJ 2228 Naptime(DP+环形处理)的更多相关文章

  1. poj 2228 Naptime dp

    这个题目的状态还是比较好想的,dp[i][j]表示已经睡了i个时段,最后睡在j时段的最优值,但是需要处理环的情况,我的做法是算两次,第一次不处理环,第二次强制性要求第一个时段需要睡,然后查看dp[m] ...

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

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

  3. POJ 2228 naptime

    环形DP 先考虑如果只是一天,我们可以用线性DP写出转移方程,注意初始化 如果是一个环的话,我们发现少了一种第n天和第一天连起来的情况,那么我们就再进行一次DP 强制这种情况 #include < ...

  4. Fire (poj 2152 树形dp)

    Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...

  5. poj上的dp专题

    更新中... http://poj.org/problem?id=1037 dp[i][j][0]表示序列长度为i,以j开始并且前两位下降的合法序列数目; dp[i][j][1]表示序列长度为i, 以 ...

  6. POJ 2096 (概率DP)

    题目链接: http://poj.org/problem?id=2096 题目大意:n种bug,s个子系统.每天随机找一个bug,种类随机,来自系统随机.问找齐n种bug,且每个子系统至少有一个bug ...

  7. poj 1463(树形dp)

    题目链接:http://poj.org/problem?id=1463 思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者. #i ...

  8. poj 2486( 树形dp)

    题目链接:http://poj.org/problem?id=2486 思路:经典的树形dp,想了好久的状态转移.dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从 ...

  9. poj 3140(树形dp)

    题目链接:http://poj.org/problem?id=3140 思路:简单树形dp题,dp[u]表示以u为根的子树的人数和. #include<iostream> #include ...

随机推荐

  1. ZBrush中如何做不同图案的遮罩

    ZBrush®软件中不仅可以创建矩形遮罩还可以创建有图案的遮罩,且是非常简单有效的,那么究竟怎样做出神奇的效果,本文将为您详细讲解. 有关反转遮罩.清除遮罩的详细内容,请点击:ZBrush中如何反选遮 ...

  2. Kattis - Babelfish

    Babelfish You have just moved from Waterloo to a big city. The people here speak an incomprehensible ...

  3. LeetCode Golang 5. 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

  4. day07 分支,循环

    目录 if(分支) if的语法 if...else... if...elif...else if的嵌套 for循环 for-else 语句 for循环的嵌套(重要) range介绍 while循环 w ...

  5. git--客户端管理工具初步使用

    说点废话哈 小白一枚, 今年3月份进入自己的第一家公司, 开始成为前端中的一份子,好在公司里有位和我一同进来的一位老哥带着我,从老哥身上学到的知识不多,(因为和老哥只相处工作了三个月,因为家里的事情, ...

  6. IDEA Maven 打包运行 jar java.io.FileNotFoundException: 问题?

    当 使用 idea maven 将项目打包运行的时候,能够成功运行,但是总会跑到 xxx\xxx\lib 下 找jar包 如下异常: java.io.FileNotFoundException: D: ...

  7. keepalived 和 heartbeat对比

    Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP): Heartbeat是基于主机或网络的服务的高可用 ...

  8. mycql 基本mysql语句(增删改查)

    操作文件夹(库) 增 (增加一个库 db1 ) create database db1 charset utf8; 查 # 查看当前创建的数据库 show create database db1; # ...

  9. C 语言中函数的跳转

    1.同一个函数内,可以使用goto语句: eg: void  text_1( void ) { char i=0; a : i++; printf ( " text_1 = %d \r\n& ...

  10. js特效——自动滚动

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...