2018.12.08 codeforces 946D. Timetable(背包)
传送门
题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完后才能离开)。
背包sbsbsb题。
注意可以从首尾分别逃课。
对于每天的上课情况我们都预处理出一个数组aia_iai表示这天逃iii节课在校的最少时间。
然后跑分组背包就可以了。
实际上可以滚动数组优化一波。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=505;
int n,m,K,a[N],f[2][N],pos[N],tmp=0;
char s[505];
inline void solve(int*pos,int tot,int*a){
if(!tot){for(ri i=0;i<=K;++i)a[i]=0;return;}
int up=min(K,tot);
for(ri tim=0;tim<=up;++tim){
if(tim==tot){a[tim]=0;break;}
a[tim]=0x3f3f3f3f;
for(ri lt=0,rt=tim;lt<=tim;++lt,--rt)a[tim]=min(a[tim],pos[tot-rt]-pos[lt+1]+1);
}
for(ri i=up+1;i<=K;++i)a[i]=a[i-1];
}
int main(){
freopen("lx.in","r",stdin);
scanf("%d%d%d",&n,&m,&K);
for(ri i=1,cnt=0,tot=0;i<=n;++i,cnt=tot=0){
scanf("%s",s+1),tmp^=1,memset(f[tmp],0x3f,sizeof(f[tmp]));
for(ri j=1;j<=m;++j)if(s[j]=='1')pos[++tot]=j;
solve(pos,tot,a);
for(ri j=0;j<=K;++j)for(ri k=0;k<=j;++k)f[tmp][j]=min(f[tmp][j],f[tmp^1][k]+a[j-k]);
}
cout<<f[tmp][K];
return 0;
}
2018.12.08 codeforces 946D. Timetable(背包)的更多相关文章
- 2018.12.08 codeforces 939E. Maximize!(二分答案)
传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...
- 2018.12.08 codeforces 948D. Perfect Security(01trie)
传送门 01trie板子题. 给出两个数列,允许把第二个数列重新排列. 求使得两个数列每个位置对应的数的异或值和成为最小值的每个位置的异或和. 把第二个数列插入到01trie里面然后对于第一个数列中的 ...
- 2018.12.08 codeforces 914D. Bash and a Tough Math Puzzle(线段树)
传送门 线段树辣鸡题. 题意简述:给出一个序列,支持修改其中一个数,以及在允许自行修改某个数的情况下询问区间[l,r][l,r][l,r]的gcdgcdgcd是否可能等于一个给定的数. 看完题就感觉是 ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- Codeforces 946D - Timetable (预处理+分组背包)
题目链接:Timetable 题意:Ivan是一个学生,在一个Berland周内要上n天课,每天最多会有m节,他能逃课的最大数量是k.求他在学校的时间最小是多少? 题解:先把每天逃课x节在学校呆的最小 ...
- Codeforces 946D Timetable(预处理+分组背包)
题目链接:http://codeforces.com/problemset/problem/946/D 题目大意:有n个字符串,代表n天的课表,1表示这个时间要上课,0表示不要上课,一天在学校时间为第 ...
- 2018.12.14 codeforces 922E. Birds(分组背包)
传送门 蒟蒻净做些水题还请大佬见谅 没错这又是个一眼的分组背包. 题意简述:有n棵树,每只树上有aia_iai只鸟,第iii棵树买一只鸟要花cic_ici的钱,每买一只鸟可以奖励bbb块钱,从一棵 ...
- CodeForces - 946D Timetable (分组背包+思维)
题意 n天的课程,每天有m个时间单位.若时间i和j都有课,那么要在学校待\(j-i+1\)个时间.现在最多能翘k节课,问最少能在学校待多少时间. 分析 将一天的内容视作一个背包的组,可以预处理出该天内 ...
- [Codeforces 946D]Timetable
Description 题库链接 给你一个 \(N\times M\) 的 \(01\) 矩阵,你可以从中将一些 \(1\) 变为 \(0\) ,最多 \(K\) 次.使操作之后使得每行最远的 \(1 ...
随机推荐
- console报错:No mapping found for HTTP request with URI(xxx)
console报错:No mapping found for HTTP request with URI(xxx) 报错可能原因: 1;contorl未加载成功 2;资源访问失败(所有访问全部被Dis ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- 【Linux 进程】fork父子进程间共享数据分析
之前我们通过fork()函数,得知了父子进程之间的存在着代码的拷贝,且父子进程都相互独立执行,那么父子进程是否共享同一段数据,即是否存在着数据共享.接下来我们就来分析分析父子进程是否存在着数据共享. ...
- Hibernate+struct web项目问题总结
问题一: ClassTable is not mapped [from ClassTable] 解决办法:在添加资源路径 <mapping resource="***/***/***/ ...
- python脚本netifaces模块的调用
# vim get_ip.py # -*- coding: utf- -*- #complete local network card IP #need install netifaces modem ...
- jq里面关于disable的用法
//两种方法设置disabled属性$('#areaSelect').attr("disabled",true);$('#areaSelect').attr("disab ...
- Android 工程目录
app java:我们写Java代码的地方,业务功能都在这里实现 res:存放我们各种资源文件的地方,有图片,字符串,动画,音频等,还有各种形式的XML文件 Gradle Scripts 1.res资 ...
- VS2013中Nuget程序包管理器控制台使用入门(一)-准备环境(原创)
准备环境: 1.打开VS2013IDE集成开发环境. 2.新建一个Asp.net Mvc的项目,比如命名为:MvcApplication1 3.打开 菜单"工具"->&quo ...
- C++中强制类型转换
C++强制类型转换 C++中的强制类型转换虽然兼容C语言中的强制类型转换.但是并不建议在C++中使用C语言风格的强制类型转换.C++中的强制类型转换共有4个关键字分别是:static_cast,con ...
- 解决Address is in use:Windows和Linux通过杀死进程
在开发无卡支付系统的过程中,因为用了端口来监听服务,在调试程序的时候,忘了关,再次运行的时候会出现Address is in use的问题,即端口已经被绑定,无法再次使用,最直观的方法就是杀死之前的进 ...