CF946D Timetable 背包dp + 思维转换

传送门

文章目录

  • 题意:
  • 思路:

题意:

在这里插入图片描述
n,m,k≤500n,m,k\le500n,m,k500

思路:

将其转换成背包的模型,就可以想出来一个很明显的dpdpdp状态:f[i][j]f[i][j]f[i][j]表示前iii行花费了jjj的最小代价,我们只需要预处理出来g[i][j]g[i][j]g[i][j]表示第iii行花费了jjj之后这一行的最小代价,就可以通过枚举jjjttt按照如下转移:f[i][j]=max(f[i][j],f[i−1][t]+g[i][j−t])f[i][j]=max(f[i][j],f[i-1][t]+g[i][j-t])f[i][j]=max(f[i][j],f[i1][t]+g[i][jt])
现在我们搞一下g[i][j]g[i][j]g[i][j]就好啦,可以发现我们每一行去除的111一定是从头或者从尾去除,那么再预处理两个数组l[i][j],r[i][j]l[i][j],r[i][j]l[i][j],r[i][j]表示第iii行从左删jjj个(从右删jjj个)之后的左边(右边)111的位置,这个很容易处理出来,之后就可以枚举去除的个数,再枚举从头去除的个数,直接O(1)O(1)O(1)转移即可。
复杂度O(n3)O(n^3)O(n3)cfcfcf测评机器很快,所以能过。

// Problem: D. Timetable
// Contest: Codeforces - Educational Codeforces Round 39 (Rated for Div. 2)
// URL: https://codeforces.com/contest/946/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=510,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m,k;
int f[N][N];//前i行,用了j个操作的最小值
int l[N][N],r[N][N],g[N][N];
char s[N];int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cin>>n>>m>>k;memset(g,0x3f,sizeof(g));memset(f,0x3f,sizeof(f));for(int i=0;i<N;i++) f[0][i]=0;for(int i=1;i<=n;i++) {scanf("%s",s+1);int cnt=0;for(int j=1;j<=m;j++) {if(s[j]!='1') continue;l[i][cnt]=j; cnt++;}cnt=0;for(int j=m;j>=1;j--) {if(s[j]!='1') continue;r[i][cnt]=j; cnt++;}for(int j=0;j<=cnt;j++) {for(int k=0;k<=j;k++) {int t=j-k;g[i][j]=min(g[i][j],r[i][t]-l[i][k]+1);}}g[i][cnt]=0;for(int j=0;j<=k;j++) {//枚举前面的花费for(int now=0;now<=cnt;now++) {//枚举当前的花费if(j+now<=k) {//cout<<j<<' '<<now<<endl;f[i][j+now]=min(f[i][j+now],f[i-1][j]+g[i][now]);//cout<<f[i][j+now]<<' '<<f[i-1][k]<<' '<<g[i][now]<<' '<<i-1<<' '<<k<<endl;}}}}int ans=INF;for(int i=0;i<N;i++) ans=min(ans,f[n][i]);cout<<ans<<endl;return 0;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET开发框架(三)-高可用服务器端设计

我们对框架功能作了简述&#xff0c;演示视频请点击 这里查看 &#xff0c;本章节&#xff0c;我们专门讲解一下&#xff0c;如何在Window服务器下&#xff0c;设计高可用的框架。我们的框架设计采用的是Window版本的服务端设计&#xff1a;整体框架图如下&#xff0c;为什么我…

P1537 弹珠 背包可行性dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 疯狂水文章。 这个很明显是个背包&#xff0c;我们开一个布尔数组&#xff0c;之后枚举每组的个数&#xff0c;让后枚举1−61-61−6&#xff0c;再枚举容量kkk&#xff0c;注意顺序不能错了…

【NOI2012】骑行川藏【拉格朗日乘数法】【二分套二分】

传送门 拉格朗日乘数法裸题 限制 f({v})∑i1nkisi(vi−vi′)EUf(\{v\})\sum_{i1}^nk_is_i(v_i-v_i)E_Uf({v})i1∑n​ki​si​(vi​−vi′​)EU​ 求 g({v})∑i1nsivig(\{v\})\sum_{i1}^n\frac{s_i}{v_i}g({v})i1∑n​vi​si​​ 最小值 设 L(λ,{v})g({v})λ[f({v})−EU]∑…

.NET Core 3.0中的WinForms创建集中式拉取请求中心

Windows 窗体&#xff08;或简称 WinForms&#xff09;&#xff0c;多年来被用于开发具有丰富和交互式界面的基于 Windows 的强大应用程序。各类企业对这些桌面应用程序的投入量非常巨大&#xff0c;每月有大约 240 万开发人员使用 Visual Studio 创建桌面式应用。利用和扩展现…

CF296B dp\容斥

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤1e5n\le1e5n≤1e5 思路&#xff1a; 求方案数基本就是考虑dpdpdp了&#xff0c;看到nnn这么大可以考虑一下分情况讨论的dpdpdp状态。 设f[i][j]f[i][j]f[i][j]表示到了第iii个&#xff0c;状态为jjj的方…

min_25筛详解

扯淡 min_25筛是由min_25提出的求积性函数前缀和的亚线性算法&#xff0c;和一个叫“扩展埃氏筛”的东西有着微妙的关系。 至于是什么关系&#xff0c;我也不太清楚&#xff0c;反正有人说很像有人说就是一个东西&#xff08;雾&#xff09; 这段话并不是废话 约定 为了方…

asp.net core 自定义异常处理中间件

Intro在 asp.net core 中全局异常处理&#xff0c;有时候可能不能满足我们的需要&#xff0c;可能就需要自己自定义一个中间件处理了&#xff0c;最近遇到一个问题&#xff0c;有一些异常&#xff0c;不希望记录错误日志&#xff0c;目前主要是用户请求取消导致的 TaskCanceled…

CF786B Legacy 线段树优化建图

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 实现如下连边后跑最短路。 思路&#xff1a; 优化建图板子题&#xff0c;优化思路就是将区间分割成若干个线段树上的线段&#xff0c;与线段树分治有点类似&#xff0c;由于有点向区间也有区间向点的边&a…

【ZJOI2015】幻想乡 Wi-Fi 搭建计划【几何】【贪心】【dp】

传送门 题意&#xff1a;一个x∈(−∞,∞),y∈[0,R]x\in(-\infin,\infin),y\in[0,R]x∈(−∞,∞),y∈[0,R]的矩形中有nnn个点&#xff0c;矩形外有mmm个半径均为RRR的圆&#xff0c;有独立的代价cic_ici​。求覆盖最多的点所需的最小代价。 n,m≤100n,m\leq100n,m≤100 显然先…

.NET架构开发应知应会

.NET程序是基于.NET framework、.NET Core、Mono、UWP【.NET实现】开发和运行的 &#xff0c;定义以上【.NET实现】的标准规范称为.NET StandardL1&#xff1a;.NET Standard.NET标准是一组API集合&#xff0c;由上层三种【.NET实现】的Basic Class Library实现&#xff0c;更正…

几个冷门字符串算法的学习笔记(最小表示法,exKMP,Lyndon Word)

所有下标均从1开始 最小表示法 给定一个串&#xff0c;求字典序最小的循环同构。 我们把串复制一遍接在后面&#xff0c;然后求出[1,N][1,N][1,N]开始的长为NNN的子串中最小的 先设i1,j2i1,j2i1,j2 然后暴力找出iii和jjj往后匹配的第一个不同的位置&#xff0c;记为ikikik…

P6348 [PA2011]Journeys 线段树优化建图 区间连区间

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 每次连接[a,b][a,b][a,b]与[c,d][c,d][c,d]之间所有点&#xff0c;让后跑最短路。 思路&#xff1a; 比普通的优化建图能简单点&#xff0c;我们只需要加两个虚点之间边权为111&#xff0c;让后让某个点连…

.NET Core IdentityServer4实战 第Ⅴ章-单点登录

OiDc可以说是OAuth的改造版&#xff0c;在最初的OAuth中&#xff0c;我们需要先请求一下认证服务器获取下Access_token&#xff0c;然后根据Access_token去Get资源服务器, 况且OAuth1 和 2 完全不兼容&#xff0c;易用性差&#xff0c;而OIDC可以在登陆的时候就把信息返回给你&…

【CF594E】Cutting the Line 【贪心】【Lyndon Word】【扩展kmp】

传送门 题意&#xff1a;给一个字符串SSS和正整数kkk&#xff0c;将SSS分成最多kkk段&#xff0c;每段不变或翻转&#xff0c;使得最后的字典序最小。 ∣S∣≤5106|S|\leq5\times10^6∣S∣≤5106 发现不翻转可以看成拆成若干单字符分别翻转&#xff0c;所以先分析一下必须翻转…

一份好的工作总结才能帮你升职加薪

这里是Z哥的个人公众号每周五早8点 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「79」篇原创敬上最近有点忙&#xff0c;搬出之前攒的一篇文章来应急一下。一篇能助你挣更多钱的文章。好了&#xff0c;下面开始。我的读者们大部分是互联网行业的&#xff0c…

CF1385E Directing Edges 拓扑序

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个图和若干个边&#xff0c;有些是有向边&#xff0c;有些是无向边&#xff0c;让你给无向边定向&#xff0c;使得最终的图是DAGDAGDAG。 思路&#xff1a; 题目让构造DAGDAGDAG&#xff0c;比较容易…

【BZOJ3684】大朋友和多叉树【生成函数】【拉格朗日反演】【多项式幂函数】

传送门 题意&#xff1a;给定nnn和集合SSS&#xff0c;求含nnn个叶子结点、非叶子节点的儿子数在SSS内的树的个数 模 950009857(4532211)950009857(453\times2^{21}1)950009857(4532211)。结点无标号但儿子间有顺序。 n≤105n \leq 10^5n≤105 算是拉格朗日反演模版题了吧………

Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个只有ANTOANTOANTO四个字母的字符串&#xff0c;你每次可以交换相邻两个&#xff0c;花费为111&#xff0c;让后让你打乱字符串&#xff0c;使得将打乱的字符串还原为原来的字符串的花费最小。 n≤1e…

腾讯开源软件镜像站上线

腾讯开源软件镜像站(Tencent Open Source Mirror Site)已于近日上线&#xff0c;其官方名称为「腾讯云软件源」&#xff0c;由腾讯云提供支持。官方表示搭建此开源镜像站的目的在于宣传自由软件的价值&#xff0c;提高自由软件社区文化氛围&#xff0c;推广自由软件在国内的应用…

【集训队作业2018】复读机【指数型生成函数】【单位根反演】【二项式定理】

传送门 单位根反演听着高级&#xff0c;其实没啥技术含量…… 本文是篇几乎没有证明的佛系讲解 单位根反演的式子长这样&#xff1a; 1n∑i0n−1ωnik[k∣n]\frac{1}{n}\sum_{i0}^{n-1}\omega_n^{ik}[k|n]n1​i0∑n−1​ωnik​[k∣n] 其实本质是IFFT 感觉懵的&#xff1f;…