【BZOJ3791】作业 DP
【BZOJ3791】作业
Description
众所周知,白神是具有神奇的能力的。
比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成;对语文作业说一声“语”,语文作业就会出于畏惧而自己完成。
今天,语文老师和数学老师布置了许多作业,同学们纷纷寻找白神寻求帮助。白神作为一个助人为乐的人,便答应下来。
回到家,白神将这N份作业按顺序摊开,发现语文作业数学作业混在一起,这就让白神苦恼起来,他如果对连续一段作业喊出“数”,那么里面的语文作业就会由于过于慌乱而写满错解,不过如果白神再对其喊一声“语”,它又会写满正确答案。
虽然白神很强大,但是能力还是有限制的,一天只能使用K次,现在,白神想知道他能正确的完成多少份作业。
Input
第一行两个整数N,K。
第二行N个0或者1表示这份作业是语文作业还是数学作业。
Output
输出一个整数,表示白神能正确完成的作业数。
Sample Input
0 1 0 1 0
Sample Output
HINT
100%的数据中N ≤ 100000,K<=50.
题解:我们先来寻找一个非常显然的结论:
如果只能喊1次,那么只能完成:若干个0
如果能喊2次,那么可以完成:若干个0-若干个1-若干个0
以此类推,如果能喊n次,那么采用最后的策略可以完成:若干个0-若干个1-若干个0...若干个0
即:如果能喊n次,那么在我们能正确完成的作业中,0和1的改变最多出现2*(n-1)次。
那么设f[i][j][0/1]表示前i份作业,已经改变了j次,最后一个完成的作业是0/1,所能完成的最多作业数,然后转移即可。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=100010;
int n,k,ans;
int v[maxn],f[maxn][100][2];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),k=rd()*2-1;
int i,j,d;
for(i=1;i<=n;i++) v[i]=rd();
f[1][1][0]=!v[1],f[1][1][1]=v[1];
for(i=2;i<=n;i++)
{
d=v[i];
for(j=1;j<=k;j++)
{
f[i][j][0]=f[i-1][j][0]+(!d);
if(!d) f[i][j][0]=max(f[i][j][0],f[i-1][j-1][1]+1);
f[i][j][1]=f[i-1][j][1]+d;
if(d) f[i][j][1]=max(f[i][j][1],f[i-1][j-1][0]+1);
ans=max(ans,max(f[i][j][0],f[i][j][1]));
}
}
printf("%d",ans);
return 0;
}
【BZOJ3791】作业 DP的更多相关文章
- BZOJ3791:作业(DP)
Description 众所周知,白神是具有神奇的能力的. 比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己完成. 今天,语文老师和 ...
- bzoj3791作业*
bzoj3791作业 题意: 对一个01序列进行染色,每次能将一个区间染上色(可覆盖之前染的),共能染k次,求最大正确染色个数.n≤100000,m≤50. 题解: 结论:染k次最多能把序列分成2*k ...
- BZOJ3791 作业(DP)
题意: 给出一个长度为n的01序列: 你可以进行K次操作,操作有两种: 1.将一个区间的所有1作业写对,并且将0作业写错: 2.将一个区间的所有0作业写对,并且将1作业写错: 求K次操作后最多写对了多 ...
- 学校作业-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 ...
随机推荐
- 控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术
写在前面的话 理解恶意软件的真实代码对恶意软件分析人员来说是非常有优势的,因为这样才能够真正了解恶意软件所要做的事情.但不幸的是,我们并不总是能够得到“真实”的代码,有时恶意软件分析人员可能需要类似反 ...
- 【Todo】【转载】Java中的锁机制2 - Lock
参考这篇文章 http://blog.csdn.net/chen77716/article/details/6641477 上一篇 (http://www.cnblogs.com/charlesblc ...
- unity shadow
这东西好难找LIGHT_ATTENUATION(a) shadow 的结果就在这个衰减里,这谁能猜的着,我一点点测出来的,reference也很难找 感谢这位http://blog.csdn.net/ ...
- js获取上传图片的尺寸大小
当上传图片时,有时候需要控制下上传图片的尺寸大小,需要给个提示 //获取图片的尺寸,控制尺寸大小 var reader = new FileReader(), img = new Image(); / ...
- 对tensorflow 中的attention encoder-decoder模型调试分析
#-*-coding:utf8-*- __author = "buyizhiyou" __date = "2017-11-21" import random, ...
- testng执行报错:org.testng.TestNGException: Cannot find class in classpath
org.testng.TestNGException: Cannot find class in classpath 解决办法:project->clean 再次执行正常运行
- 2017.3.31 spring mvc教程(八) <mvc:annotation-driven />所做的工作
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- iOS之定制tabbar
我们知道,一个Tab控制器控制着若干视图控制器,它是由一个数组进行管理的,每一个Tab控制器只有一 UITabBar视图,用于显示UITabBarItem实例.我们通过点击UITabBarItem来切 ...
- NativeCode中通过JNI反射调用Java层的代码,以获取IMEI为例
简单说,就是在NativeCode中做一些正常情况下可以在Java code中做的事儿,比如获取IMEI. 这种做法会使得静态分析Java层代码的方法失效. JNIEXPORT jstring JNI ...
- Nigix加入Hello World模块
详细资料:<深入理解Nginx> 1.编写第三方模块 建立文件夹hello,里面有两个文件: ngx_http_mytest_module.c #include <ngx_confi ...