题目链接

题目

题目描述

从前有个富帅叫做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\) 总方案数。因此有公式:

\[f[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酱要旅行的更多相关文章

  1. UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming<Problem M>

    M - 酱神的旅行 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  2. 【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流

    1570: [JSOI2008]Blue Mary的旅行 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 388  Solved: 212[Submit ...

  3. 11.14 T2 小x的旅行(小x的旅行)

    1.小x的旅行   (travel.pas/c/cpp) [问题描述] 小x大学毕业后,进入了某个公司做了高层管理,他每年的任务就是检查这个公司在全国各地N个分公司的各种状况,每个公司都要检查一遍,且 ...

  4. hdoj 2066 一个人的旅行

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  5. xth的旅行(codevs 1450)

    题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...

  6. Fzu月赛11 老S的旅行计划 dij

    Description 老S在某城市生活的非常不自在,想趁着ICPC举办期间在省内转转.已知老S所在的省有N个城市,M条无向边(对于某一对结点可能出现重边).由于省内的交通相当糟糕,通过某条边所需要花 ...

  7. 一个人的旅行-Floyd

    一个人的旅行 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  8. hd2066一个人的旅行

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  9. BZOJ-1050 旅行comf 并查集+乱搞

    好久以前codevs上做过的,拿着改了改.. 1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2194 S ...

  10. CODEVS 1036 商务旅行

    题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任 ...

随机推荐

  1. Cortex M3 CORE

    Cortex CM3 内核架构 CM3内核主要包含几个部分:取指(Fetch)\指令译码(Decoder/DEC)\执行(EXEC)\ALU 内存取数通过load & store指令,就是通过 ...

  2. 开启大页与否对CacheBuffer的影响的学习

    开启大页与否对CacheBuffer的影响的学习 背景 最近遇到数据库压力较高的场景. 原厂工程师到位后修改了几个参数(自己以为参数没问题) 然后最近一周环境就比较正常了. 这个地方很打脸, 自己没有 ...

  3. [转帖]oracle数据库中RMAN备份格式化format解释

    格式化解释: 使用格式串 更改格式命令: RMAN> configure channel device type disk format ' E:\app\Administrator\db_ba ...

  4. [转帖]如何在一个Docker中同时运行多个程序进程?

    https://cloud.tencent.com/developer/article/1683445 我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一 ...

  5. Vue3类型判断和ref的两个作用

    1.类型判断的四种方法 isRef: 检查一个值是否为一个ref对象 isReactive:检查一个对象是否是由 reactive 创建的响应式代理 isReadonly: 检查一个对象是否是由 re ...

  6. 【JS 逆向百例】某音 X-Bogus 逆向分析,JSVMP 纯算法还原

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...

  7. 【JS 逆向百例】有道翻译接口参数逆向

    逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o?smartresult=di ...

  8. Why gRPC ?

    gRPC(gRPC Remote Procedure Call)是由 Google 开发的开源 RPC 框架,它基于 HTTP/2 标准,使用 Protocol Buffers 作为接口定义语言(ID ...

  9. 探索 GO 项目依赖包管理与Go Module常规操作

    探索 GO 项目依赖包管理与Go Module常规操作 目录 探索 GO 项目依赖包管理与Go Module常规操作 一.Go 构建模式的演变 1.1 GOPATH (初版) 1.1.1 go get ...

  10. 解锁搜索新境界!让文本语义匹配助你轻松找到你需要的一切!(快速上手baseline)

    解锁搜索新境界!让文本语义匹配助你轻松找到你需要的一切!(快速上手baseline) 实现了多种相似度计算.匹配搜索算法,支持文本.图像,python3开发,pip安装,开箱即用. 文本相似度计算(文 ...