NC210520 Min酱要旅行
题目
题目描述
从前有个富帅叫做Min酱,他很喜欢出门旅行,每次出门旅行,他会准备很大一个包裹以及一大堆东西,然后尝试各种方案去塞满它。
然而每次出门前,Min酱都会有个小小的烦恼。众所周知,富帅是很讨妹子喜欢的,所以Min酱也是有大把大把的妹子,每次出门都会有一只妹子随行。然而这些妹子总是会非常排斥Min酱准备的众多东西中的一件(也许是因为这件东西是其它妹子送给Min酱的),这件东西Min酱是万万不敢带上的,否则的话……嘿嘿嘿。另外,妹子们嫌Min酱的包裹太丑了,会自带一个包裹去换掉Min酱的包裹。
Min酱是个控制欲很强的人,然而这样一来,Min酱就不知道可以用多少种方案去填充包裹了,所以Min酱很郁闷。
于是Min酱找到了聪明的你,希望你能帮助他解决这些问题。
另外,Min酱是个典型的懒人,他不希望每次带不同的妹子出去都麻烦你,所以他希望你能给出有 \(K_1..K_n\) 件物品,第 \(i\) 件不能带并且包裹大小为 \(1..M\) 的所有方案数。
输入描述
可能有多组数据。对于每一组数据:
第一行,两个整数 \(n,m\) ,分别表示物品数量和妹子带的包裹的最大容积。
第二行,\(n\) 个正整数,分别表示物品 \(K_i\) 的体积。
输出描述
对于每一组数据,输出一个 \(n \times m\) 的矩阵,第 \(i\) 行 \(j\) 列表示包裹容积为 \(j\) ,不能带 \(i\) 号物品时,装满包裹的方案总数。
为了美观起见,我们只保留方案数的个位。
示例1
输入
3 2
1 1 2
输出
11
11
21
备注
\(1\leq n,m \leq 2300,K_i \leq 1000\)
题解
知识点:背包dp,计数dp。
显然如果不加限制,一遍简单的计数背包dp就能得到所有体积的方案,设状态为 \(dp[i][j]\)。
但现在要输出不选 \(i\) 且体积为 \(j\) 的方案数,设其为 \(f[i][j]\)。当 \(j>v[i]\) ,答案 = 体积为 \(j\) 总方案数 - 选 \(i\) 且体积为 \(j\) 的方案数 = 体积为 \(j\) 总方案数 - 不选 \(i\) 后体积为 \(j-v[i]\) 的方案数;当 \(j\leq v[i]\) ,答案就是体积为 \(j\) 总方案数。因此有公式:
\left \{
\begin{array}{l}
dp[n][j] - f[i][j-v[i]] &,j >v[i]\\
dp[n][j] &,j\leq v[i]
\end{array}
\right.
\]
所以 \(f[i][j]\) 可以递推。
时间复杂度 \(O(nm)\)
空间复杂度 \(O(nm)\)
代码
#include <bits/stdc++.h>
using namespace std;
int k[2307], dp[2307], f[2307];///dp纯0/1背包;不选i时,f[j]表示不选i时体积为j时的方案
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> k[i];
dp[0] = 1;
for (int i = 1;i <= n;i++)
for (int j = m;j >= k[i];j--)
dp[j] = (dp[j] + dp[j - k[i]]) % 10;
/*
f[j] = 不选i时体积为j的方案
= 体积为j时总方案 - 选i时体积为j的方案
= 体积为j时总方案 - 不选i时体积为j - k[i]的方案
= dp[j] - f[j-k[i]]
当j<k[i]时,dp[j] = f[j] 因为本来就没得选
*/
for (int i = 1;i <= n;i++) {
for (int j = 0;j <= m;j++) {///每次都会覆盖,不需要归零
if (j < k[i]) f[j] = dp[j];
else f[j] = (dp[j] - f[j - k[i]] + 10) % 10;
}
for (int j = 1;j <= m;j++) cout << f[j];
cout << '\n';
}
return 0;
}
NC210520 Min酱要旅行的更多相关文章
- UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming<Problem M>
M - 酱神的旅行 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- 【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流
1570: [JSOI2008]Blue Mary的旅行 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 388 Solved: 212[Submit ...
- 11.14 T2 小x的旅行(小x的旅行)
1.小x的旅行 (travel.pas/c/cpp) [问题描述] 小x大学毕业后,进入了某个公司做了高层管理,他每年的任务就是检查这个公司在全国各地N个分公司的各种状况,每个公司都要检查一遍,且 ...
- hdoj 2066 一个人的旅行
Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...
- xth的旅行(codevs 1450)
题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...
- Fzu月赛11 老S的旅行计划 dij
Description 老S在某城市生活的非常不自在,想趁着ICPC举办期间在省内转转.已知老S所在的省有N个城市,M条无向边(对于某一对结点可能出现重边).由于省内的交通相当糟糕,通过某条边所需要花 ...
- 一个人的旅行-Floyd
一个人的旅行 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- hd2066一个人的旅行
Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...
- BZOJ-1050 旅行comf 并查集+乱搞
好久以前codevs上做过的,拿着改了改.. 1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2194 S ...
- CODEVS 1036 商务旅行
题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任 ...
随机推荐
- 使用 Woodpecker 与 Gitea 搭建纯开源的 CI 流程|极限降本
最近开源了一个挂机冒险游戏<模拟龙生>,有热心同学不仅帮忙做优化,还连夜在给游戏加页面,泪目.详见文末小结部分. 一.前言 大家好,这里是白泽.这篇文章是<Woodpecker CI ...
- 基于java+springboot的外卖点餐网站、外卖点餐管理系统
该系统是基于java+springboot开发的外卖点餐网站.外卖点餐管理系统.是给师弟开发的课程作业.运行过程中的问题,可以在github咨询作者. 演示地址 前台地址: http://food.g ...
- DBA实战面试题(一)
数据库面试测试题(一) 简述当前主流RDBMS软件有哪些?开源且跨平台的数据库软件有哪些? 参考答案 当前主流的数据库服务器软件有: Oracle . DB2 . SQL SERVER .MySQL ...
- Java开发者的Python快速进修指南:探索15种独特的Python特殊方法
概述 在Python中,特殊方法(也称为魔术方法)是由Python解释器自动调用的,我们不需要手动调用它们,而是使用内置函数来间接地使用它们.举个例子,我们可以实现特殊方法__len__(),然后通过 ...
- [转帖]Shell编程规范与变量
目录 一.Shell的概念 Shell脚本的概念 Shell脚本应用场景 二.Shell的作用 Shell脚本种类 shell脚本的作用 Shell脚本的构成 Shell脚本的构成 二.编写Shell ...
- [转帖]jmeter实现不写代码把测试结果存入execl
这里使用数据库作为中间件来实现不写代码就把测试结果存入execl,下面是步骤 1.新建一个setup线程组用来设置数据库连接信息和新建数据库,如下图所示,我们使用sqlite数据库来存储信息,因为不需 ...
- [转帖]jmeter必备正则表达式
元字符 . 注意是一个点号,表示匹配任意单个字符 \d 表示匹配任意单个数字 [0-9] 等价于0-9 [a-zA-Z] 等价于所有的大小写字母 限定符 + 加号,表示匹配至少大于1次(1次或多次 ...
- [转帖]Jmeter学习笔记(九)——响应断言
Jmeter学习笔记(九)--响应断言 https://www.cnblogs.com/pachongshangdexuebi/p/11571348.html Jmeter中又一个元件叫断言,用于检查 ...
- [转帖]Nginx reuseport 导致偶发性卡顿
https://github.com/jonmeredith/tcpperf https://plantegg.github.io/2023/06/08/Nginx%20reuseport%20%E5 ...
- [转帖]What is Pstate
https://www.jianshu.com/p/342480d917e3 When someone refers to a P-state, generally only the frequenc ...