洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包
本文学习自洛谷社区
喜提CCPC2021网络赛原题
题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分。最大化k个子弹能得到的最大得分。
预处理出第 \(i\) 列 \(j\) 个子弹能得到的最大得分,记为\(sum[i][j]\),那么这可以转为一个分组背包问题。但一个小问题是,在没有子弹时,你不能在打掉'Y'格,因此我们需要追踪最后一发子弹的去向。
记\(sum[i][j][0]\)表示第\(i\)列用\(j\)个子弹,全局的最后一发子弹不打在这一列能得到的最大得分,\(sum[i][j][1]\)表示第\(i\)列用\(j\)个子弹,全局的最后一发子弹打在这一列的最大得分。
最后一发子弹没有打在这一列的话,预处理时能从第\(n\)行不断往上爬直到无法爬为止,遇到'Y'就能以0的代价拿下。但若最后一发子弹打在这一列,碰上'N'时,\(sum[i][j][1]\)需要用s\(um[i][j−1][0]\)更新。据此可以写出预处理代码如下:
for (int i = 1; i <= m; i++) {
for (int j = n, cnt = 0; j >= 1; j--) {
if (c[j][i] == 'Y') {
sum[i][cnt][0] += a[j][i];
} else {
cnt++;
sum[i][cnt][0] = sum[i][cnt-1][0] + a[j][i];
sum[i][cnt][1] = sum[i][cnt-1][0] + a[j][i];
}
}
}
然后考虑修改后的“分组背包”。记\(dp[i][j][0]\)表示前\(i\)列\(j\)发子弹,最后一发子弹不打在前i列能得到的最大得分,\(dp[i][j][1]\)表示前\(i\)列\(j\)发子弹,最后一发子弹打在前\(i\)列能得到的最大得分。转移有如下几种:
1.最后一发打在当前列,即\(l>0\)
dp[i][j][1] = max(dp[i][j][1], dp[i-1][j-l][0]+sum[i][l][1]);
2.最后一发打在前\(i\)列,但不是当前列,即\(j−l>0\)
dp[i][j][1] = max(dp[i][j][1], dp[i-1][j-l][1]+sum[i][l][0]);
3.最后一发不打在前ii列
dp[i][j][0] = max(dp[i][j][0], dp[i-1][j-l][0]+sum[i][l][0]);
for (int i = 1; i <= m; i++) {
for (int j = 0; j <= k; j++) { //一共有j发子弹
for (int l = 0; l <= min(j, n); l++) { //尝试在这一列打l发
//case 3
dp[i][j][0] = max(dp[i][j][0], dp[i-1][j-l][0]+sum[i][l][0]);
if (l) { //case 1
dp[i][j][1] = max(dp[i][j][1], dp[i-1][j-l][0]+sum[i][l][1]);
}
if (j-l) { //case 2
dp[i][j][1] = max(dp[i][j][1], dp[i-1][j-l][1]+sum[i][l][0]);
}
}
}
}
然后就可以过了。
洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包的更多相关文章
- 洛谷P1174 打砖块
题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...
- 洛谷 P1174 打砖块
题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...
- 洛谷 P1064 金明的预算方案【有依赖的分组背包】
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱 ...
- 洛谷 P5594 【XR-4】模拟赛
洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...
- 洛谷P3376【模板】网络最大流 ISAP
这篇博客写得非常好呀. 传送门 于是我是DCOI这一届第一个网络流写ISAP的人了,之后不用再被YKK她们嘲笑我用Dinic了!就是这样! 感觉ISAP是会比Dinic快,只分一次层,然后不能增广了再 ...
- CCPC2021网络赛 1012 Remove
2021CCPC网络赛 1012 Remove 题意 给定 \(n, m\),然后再给 \(m\) 个素数,问对于所有 \(i \in [1,n]\),将 \(i\) 操作至 \(0\) 的最小操作数 ...
- 【洛谷2304_LOJ2134】[NOI2015]小园丁与老司机(动态规划_网络流)
题目: 洛谷 2304 LOJ 2134 (LOJ 上每个测试点有部分分) 写了快一天 -- 好菜啊 分析: 毒瘤二合一题 -- 注意本题(及本文)使用 \(x\) 向右,\(y\) 向上的「数学坐标 ...
- 【洛谷2904/BZOJ1617】[USACO08MAR]跨河River Crossing(动态规划)
题目:洛谷2904 分析: 裸dp-- dp方程也不难想: \(dp[i]\)表示运\(i\)头牛需要的最短时间,\(sum[i]\)表示一次运\(i\)头牛(往返)所需的时间,则 \[dp[i]=m ...
- 洛谷P3376 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 洛谷 P3376 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
随机推荐
- Java程序员必备技能:Collections工具类深度解析!
在之前的文章中,我们学习了单列集合的两大接口及其常用的实现类:在这些接口或实现类中,为我们提供了不少的实用的方法. 本篇文章我们来介绍一种java开发者为我们提供了一个工具类,让我们更好的来使用集合 ...
- 【Javaweb】五(Service类)
一般Spring项目中处理业务的层为Service层,称为业务层.目前常见的风格有: 写法:Service层=Service接口+ServiceImpl实现类 AdminServiceImpl.jav ...
- jdk9模块化
JDK 9是Java开发语言的一个重大版本.其中最令人兴奋的新特性之一是模块化系统.模块化系统提出了一种新的代码组织方式,它可以帮助开发人员更好地组织和管理代码,从而使Java应用程序更加可维护.可扩 ...
- springMvc_控制台中文乱码问题
Post方法解决控制台乱码 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = ne ...
- influxdb 进行数据删除和修改
本文为博主原创,转载请注明出处: 1.条件删除数据 InfluxDB 只支持基于时间的删除操作. 可以使用 DELETE 语句来删除指定时间范围内的数据.例如,以下的 SQL 语句将删除 measur ...
- shopify主题模板速度优化
前两天一位新客户说他的shopify店铺加载速度很慢,首页完全加载需要 5~6 秒甚至更高,问ytkah有没办法帮忙优化一下.shopify网站速度优化要看具体用了什么模板,有什么功能,哪些可以改哪些 ...
- 年底了,网站被挂马了,关于IIS被陌生DLL劫持(新人发帖,写的不好的地方,请多多担待)
一上班被分到两个需要杀毒的站点,情况是SEO被劫持 出现一些博彩信息,但是打开确实正常内容,使用站长工具的网站被黑检测功能,发现网站的HEAD前面加载一对加密的东西 一开始我使用D盾扫描网站,删除了一 ...
- websocket实现实时直播
websocket实现实时直播 这篇文章我首发于简书,拿到这里发表不过分吧?点个赞再走呗! 作为一名web开发者,我使用websocket实现实时直播(滑鸡版). 为什么是滑鸡版呢?因为他上不了生产, ...
- Asp .Net Core 系列: 集成 CORS跨域配置
目录 什么是CORS? Asp .Net Core 种如何配置CORS? CorsPolicyBuilder类详解 注册以及使用策略三种方式 EnableCors 和 DisableCors 特性 关 ...
- Docker + Jenkins 如何实现自动化部署?
Docker + Jenkins 如何实现自动化部署? 一. 概述 实验室每次项目发布测试时,都要手动本地打包好了然后上传到服务器,替换原来nginx下面的目录文件,十分麻烦和繁琐.这次就来优化一下, ...