POJ 2228 Naptime(DP+环形处理)
题解
这题一眼望去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+环形处理)的更多相关文章
- poj 2228 Naptime dp
这个题目的状态还是比较好想的,dp[i][j]表示已经睡了i个时段,最后睡在j时段的最优值,但是需要处理环的情况,我的做法是算两次,第一次不处理环,第二次强制性要求第一个时段需要睡,然后查看dp[m] ...
- poj 2228 Naptime(DP的后效性处理)
\(Naptime\) \(solution:\) 这道题不做多讲,它和很多区间DP的套路一致,但是这一道题它不允许断环成链,会超时.但是我们发现如果这只奶牛跨夜休息那么它在不跨夜的二十四个小时里一定 ...
- POJ 2228 naptime
环形DP 先考虑如果只是一天,我们可以用线性DP写出转移方程,注意初始化 如果是一个环的话,我们发现少了一种第n天和第一天连起来的情况,那么我们就再进行一次DP 强制这种情况 #include < ...
- Fire (poj 2152 树形dp)
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...
- poj上的dp专题
更新中... http://poj.org/problem?id=1037 dp[i][j][0]表示序列长度为i,以j开始并且前两位下降的合法序列数目; dp[i][j][1]表示序列长度为i, 以 ...
- POJ 2096 (概率DP)
题目链接: http://poj.org/problem?id=2096 题目大意:n种bug,s个子系统.每天随机找一个bug,种类随机,来自系统随机.问找齐n种bug,且每个子系统至少有一个bug ...
- poj 1463(树形dp)
题目链接:http://poj.org/problem?id=1463 思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者. #i ...
- poj 2486( 树形dp)
题目链接:http://poj.org/problem?id=2486 思路:经典的树形dp,想了好久的状态转移.dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从 ...
- poj 3140(树形dp)
题目链接:http://poj.org/problem?id=3140 思路:简单树形dp题,dp[u]表示以u为根的子树的人数和. #include<iostream> #include ...
随机推荐
- Pyhton学习——Day54
#Django内容回顾# -请求响应HTTP协议(有.无状态)默认传递的是字符串# 传递字符串分为两个部分:1.http1.1 GET /url /index + 请求头# Provisional h ...
- AIM Tech Round 5 1028cf(A-E)
AIM Tech Round 5 (codeforces上题目编号是1028)(A-E) ---完全被这次比赛打击,自己真的很渣--- 战况 依旧3题选手 被构造题坑得好惨 稍稍涨了rating,希望 ...
- Web Service 实践之 REST vs RPC
作者:朱涛 出处:http://www.cnblogs.com/mindsbook/archive/2009/11/17/web_service_RESTvsRPC.html Web Service ...
- vue 删除某个元素和删除某些元素
今天做项目使用前端vue框架,需要循环遍历去删除一些数组元素.开始思想局限,一直纠结如何去循环删除,犹豫循环删除数组值下标会发生变化,并不是一种好的方法. 方法一:使用forEach 和 splice ...
- [luogu] P3089 [USACO13NOV]POGO的牛Pogo-Cow
P3089 [USACO13NOV]POGO的牛Pogo-Cow 题目描述 In an ill-conceived attempt to enhance the mobility of his pri ...
- 支持Openflow 1.3的wireshark插件安装教程
目前为止,我们使用openflow wiki里提供的minient镜像里集成的wireshark只支持openflow1.0,我们通过wireshark上 菜单 help-->about wir ...
- centos7下搭建solr服务器
1.Solr的环境 Solr是java开发. 需要安装jdk. 安装环境Linux. 需要安装Tomcat. 1.2. 搭建步骤 第一步:把solr 的压缩包上传到Linux系统 第二步:解压solr ...
- angular-Scope
Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Scope 可应用在视图和控制器上. 当你在 Ang ...
- cogs 2752. [济南集训 2017] 数列运算
2752. [济南集训 2017] 数列运算 ★★☆ 输入文件:sequenceQBXT.in 输出文件:sequenceQBXT.out 简单对比时间限制:1 s 内存限制:512 ...
- 在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性
在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性 Maven 项目生成jar运行时提示“没有主清单属性” 新建了一个Maven的项目,mvn compile和mvn packag ...