BZOJ3791 作业(DP)
题意:
给出一个长度为n的01序列;
你可以进行K次操作,操作有两种:
1.将一个区间的所有1作业写对,并且将0作业写错;
2.将一个区间的所有0作业写对,并且将1作业写错;
求K次操作后最多写对了多少作业;
n<=100000,k<=50;
题解
性质:在一段区间内染色k次,每次是一段连续的,那么这个区间最多被分为2*k-1段
证明:每次染区间中间位置,最终只会染出2*k-1段(还是不明白的自己画画图)
解题思路:
令dp[i][j][k]表示 当前考虑到第i本作业,1-i这段区间被染成了j段,第i本作业染为k(0或1)
则状态转移方程为
第i本作业由两种状态转移过来:
一、继承了i-1的状态,也就是原本有一次染色是染到i-1为止,现在把i也连着染一下,此时染色次数不变 即 dp[i-1][j][k]
二、从i开始新一次的染色,此时i-1的状态应该和i的状态是相反的,因为如果是相同的状态的话就没必要新一次染色了,此时染色次数要+1 即dp[i-1][j-1][k^1]
即:dp[i][j][0]=max(dp[i-1][j-1][1],dp[i-1][j][0])+(a[i]==0);
dp[i][j][1]=max(dp[i-1][j-1][0],dp[i-1][j][1])+(a[i]==1);
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[];
int dp[][][];
int n,K;
int read(){
int ans=;char c=getchar();
while(!(c>=''&&c<='')) c=getchar();
while(c>=''&&c<=''){
ans=ans*+c-;
c=getchar();
}
return ans;
}
int main(){
freopen("hwk.in","r",stdin);
freopen("hwk.out","w",stdout);
n=read();K=read();
for(int i=;i<=n;i++)
a[i]=read();
int ans=,i;
if(K==){
printf("");
return ;
}
for(int j=;j<=*K-;j++){
for(i=;i<=n;i++){
dp[i][j][]=max(dp[i-][j-][],dp[i-][j][])+(a[i]==);
dp[i][j][]=max(dp[i-][j-][],dp[i-][j][])+(a[i]==);
ans=max(ans,max(dp[i][j][],dp[i][j][]));
}
}
printf("%d",ans);
return ;
}
BZOJ3791 作业(DP)的更多相关文章
- BZOJ3791:作业(DP)
Description 众所周知,白神是具有神奇的能力的. 比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己完成. 今天,语文老师和 ...
- bzoj3791作业*
bzoj3791作业 题意: 对一个01序列进行染色,每次能将一个区间染上色(可覆盖之前染的),共能染k次,求最大正确染色个数.n≤100000,m≤50. 题解: 结论:染k次最多能把序列分成2*k ...
- 【BZOJ3791】作业 DP
[BZOJ3791]作业 Description 众所周知,白神是具有神奇的能力的.比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己 ...
- 学校作业-Dp练习
题目 ★Stringsobits01 串 考虑排好序的 N(N<=31)位二进制数. 你会发现,这很有趣.因为他们是排列好的,而且包含所有可能的长度为 N 且含有 1 的个数小于等于 L(L ...
- 【BZOJ3379】[Usaco2004 Open]Turning in Homework 交作业 DP
[BZOJ3379][Usaco2004 Open]Turning in Homework 交作业 Description 贝茜有C(1≤C≤1000)门科目的作业要上交,之后她要去坐巴士和奶 ...
- bzoj3791 作业
Description 众所周知,白神是具有神奇的能力的. 比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己完成. 今天,语文老师和 ...
- BZOJ3791 作业 动态规划
你发现染 $k$ 次最多会将这个序列分成 $2k-1$ 段,然后任何 $2k-1$ 段以内的方案一定能被构建出来,所以直接 dp 就好了 #include <bits/stdc++.h> ...
- hdu 1074(状态压缩dp+记录路径)
题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...
- [UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥
题目链接: [集训队作业2018]小Z的礼物 题目要求的就是最后一个喜欢的物品的期望得到时间. 根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq ...
随机推荐
- MySQL高级管理
#mysql数据库密码的修改 一.mysql密码的修改与恢复 1.修改密码 mysqladmin -u root -p123 password 456 数据库内修改 method.first: upd ...
- 数据库 Hash Join的定义,原理,算法,成本,模式和位图
Hash Join只能用于相等连接,且只能在CBO优化器模式下.相对于nested loop join,hash join更适合处理大型结果集 Hash Join的执行计划第1个是hash ...
- HTML | CSS | JavaScript 常见错误
持续更新 超链接鼠标悬浮后的状态 a:hover 拼写 图片文件的路径问题
- 程序日志-应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)授予针对 CLSID 为 {D63B10C5-BB46-4990-A94F-E40B9D520
应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-1 ...
- 卸载nginx之后重新安装
Ubuntu 14.04上卸载nginx之后重新安装没有重新生成配置文件的解决方法 在配置nginx做实验时配置错了,导致访问不了虚拟主机.一狠心把nginx的配置文件目录(/etc/nginx)都删 ...
- Jmeter(十七)_jmeter与java_selenium自动化
Jmeter可以通过WebDriver来完成UI自动化测试,也可以测试浏览器端对系统的压力,需要以下jiar包 基本配置 1:下载JMeterPlugins-WebDriver-1.3.1.zip,解 ...
- 分布式并行计算MapReduce
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...
- 基于Hadoop爬虫网易云歌曲评论
作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 本次选取的是爬取歌曲<大碗宽面>的歌评数据 1.将 ...
- 推荐一款不错的MarkDown在线编辑器
StackEdit链接:https://stackedit.io/editor StackEdit可以实现同步编辑预览,如下图展示: 菜单界面 功能包括: 管理多个 MarkDown 文档.可在线或离 ...
- bat批处理 取得当前路径 %CD%
在DOS的批处理中,有时候需要知道当前的路径.在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量的用法和代表的内容一般是不同的. 1. %cd% 可以用在批 ...