Timetable CodeForces - 946D (预处理+背包)
题意:n天m节课,最多可以逃k节课,每天在学校待的时间为该天上的第一节课到最后一节课持续的时间。问怎样逃课可以使这n天在学校待的时间最短,输出最短的时间。
分析:
1、预处理出每天逃j节课时在学校待的最短时间。t[i][j]
2、dp[i][j]为截止到第i天逃j节课待在学校的最短时间。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 500 + 10;
const int INF = 0x3f3f3f3f;
char pic[MAXN][MAXN];
vector<int> v[MAXN];
int t[MAXN][MAXN];
int dp[MAXN][MAXN];
int main(){
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= n; ++i){
scanf("%s", pic[i]);
}
for(int i = 1; i <= n; ++i){
for(int j = 0; j < m; ++j){
if(pic[i][j] == '1'){
v[i].push_back(j);
}
}
}
for(int i = 1; i <= n; ++i){
int len = v[i].size();
int mi = min(len, k);
for(int j = 0; j <= mi; ++j){//逃课数
int rest = len - j;
if(rest == 0){//今天不用上课
t[i][j] = 0;
continue;
}
int Mi = INF;
for(int w = 0; w < len; ++w){
int et = w + rest - 1;
if(et >= len) break;
Mi = min(Mi, v[i][et] - v[i][w] + 1);
}
t[i][j] = Mi;
}
}
for(int i = 1; i <= n; ++i){
for(int j = 0; j <= k; ++j){
dp[i][j] = INF;
for(int w = 0; w <= j; ++w){
dp[i][j] = min(dp[i][j], dp[i - 1][w] + t[i][j - w]);
}
}
}
printf("%d\n", dp[n][k]);
return 0;
}
Timetable CodeForces - 946D (预处理+背包)的更多相关文章
- Timetable CodeForces - 946D (区间dp)
		
大意: n天, 每天m小时, 给定课程表, 每天的上课时间为第一个1到最后一个1, 一共可以逃k次课, 求最少上课时间. 每天显然是独立的, 对每天区间dp出逃$x$次课的最大减少时间, 再对$n$天 ...
 - 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.08 codeforces 946D. Timetable(背包)
		
传送门 题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完后才能离开) ...
 - CodeForces - 946D Timetable (分组背包+思维)
		
题意 n天的课程,每天有m个时间单位.若时间i和j都有课,那么要在学校待\(j-i+1\)个时间.现在最多能翘k节课,问最少能在学校待多少时间. 分析 将一天的内容视作一个背包的组,可以预处理出该天内 ...
 - [Codeforces 946D]Timetable
		
Description 题库链接 给你一个 \(N\times M\) 的 \(01\) 矩阵,你可以从中将一些 \(1\) 变为 \(0\) ,最多 \(K\) 次.使操作之后使得每行最远的 \(1 ...
 - CodeForces 946D Timetable (DP)
		
题意:给定 n,m,K,表示某个人一个周有 n 天,每天有 m 节课,但是他可以跳过 K 节课,然后下面每行一个长度为 m 个01字符串,0 表示该人在这一小时没有课,1 表示该人在这一个小时有课,每 ...
 - Destroy the Colony CodeForces - 1111D (可逆背包,计数)
		
大意:给定字符串$s$, 保证长度为偶数, 给定q个询问, 每次询问给定两个位置$x$,$y$, 可以任意交换字符, 要求所有字符$s[x],s[y]$在同一半边, 剩余所有同种字符在同一半边的方案数 ...
 - Codeforces 336C 0-1背包
		
题意:每个水果有两个值,一个美味度 a,一个卡路里 b,从中挑选一些,要求 sum(aj) / sum(bj) = k,使得 sum(a) 最大. 分析:没有那个条件就是一个01背包,可以转换,对公式 ...
 
随机推荐
- JavaScript - 包装类型
			
1. 概念 基本类型是没有方法的 包装类型作用是为了方便操作基本数据类型 // 下面代码的问题? // s1是基本类型,基本类型是没有方法的 var s1 = 'zhangsan'; var s2 = ...
 - ubuntu 更改pip默认源
			
mkdir ~/.pip vim ~/.pip/pip.conf [global] timeout = 6000 https://pypi.tuna.tsinghua.edu.cn/simple 保存 ...
 - Java基础知识笔记第四章:类和对象
			
编程语言的几个发展阶段 面向机器语言 面向过程语言 面向对象语言:封装.继承.多态 类 类声明 class Person{ ....... } class 植物{ ....... } 类体 类使用 ...
 - frp 配置
			
前言 对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题. 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy.FRP 是一 ...
 - 墨西哥萨卡特卡斯将举行GNOME GUADEC 2020 峰会
			
导读 GNOME基金会今天宣布了下两届GUADEC(GNOME用户和开发人员欧洲会议)活动的主办城市,这也将是GNOME桌面环境下一版本的代号. 随着GNOME 3.34 “Thessalonik”的 ...
 - Systemverilog for design 笔记(五)
			
转载请标明出处 第一章 System Verilog过程块.任务和函数 1.1. verilog通用目的always过程块(procedural block)(可综合) always过程块的综合 ...
 - [CMake笔记] CMake向解决方案添加源文件兼头文件
			
回顾 在上一篇笔记里总结的时候说到,aux_source_directory这个函数在添加源码文件时,是不会把头文件添加进去的,这里就介经一下另外一个方法,也是我一直使用的. 添加文件*.cpp与*. ...
 - CS231n -Assignments 1  Q1 and Q2
			
前言 最近在youtube 上学习CS231n的课程,并尝试完成Assgnments,收获很多,这里记录下过程和结果以及过程中遇到的问题,我并不是只是完成需要补充的代码段,对于自己不熟悉的没用过的库函 ...
 - 郁闷的  IE6/7/8  所遇兼容问题
			
IE6,7只支持inline元素设置为inline-block,但不支持block元素转换成inline-block,所以非inline元素在IE6,7下要转换成inline-block,需先转换成i ...
 - SpringBoot 处理异常的几种常见姿势
			
SpringBoot 处理异常的几种常见姿势 1. 使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常 这是目前很常用的一种方式,非常推荐.测试代码中用到了 ...