思路

题目要问的,是 kkk 个物品最多能组成多少种不同的权值之和(每个数量不限)。

正着求当然很麻烦,但是反着解相对来说就简单多了。

所以我们可以将题目转化为:

求凑某个权值和最少要多少物品,如果最少个数比 kkk 要大,则这个权值和就无法凑出。

题目分析到这里,就不难看出是背包 dp 了。

代码实现

状态转移

我们用 dpidp_idpi​ 表示凑出权值和为 i 最少需要多少件物品。

01 背包问题这里不多阐述了。

则可以得到状态转移方程为:dpi←min⁡dpi,dpi−aj+1dp_i \gets \min dp_i,dp_{i-a_j}+1dpi​←mindpi​,dpi−aj​​+1。

(j 为从 1 到 nnn 个物品中满足 aj≤ia_j \le iaj​≤i 的物品。)


优化

这里做一个简单的优化:

我们让权值最小的物品的权值为 0,其余的物品权值都减去最小的权值。

这样,最后当 dpi<kdp_i < kdpi​<k(即数量不足)时,

可以用权值最小(刚刚权值清 0)的那个物品补上。

同时,在 dp 的时候我们也不用顾忌到数量要求了。


代码

(更多细节请见代码及注释。)

#include<bits/stdc++.h>
using namespace std;const int maxn = 1005;
int n, k;
int limi;
int a[maxn], dp[maxn * maxn];int read ()
{int x = 1, s = 0;char ch = getchar ();while (ch < '0' or ch > '9') {if (ch == '-') x = -1; ch = getchar ();}while (ch >= '0' and ch <= '9') s = s * 10 + ch - '0', ch = getchar ();return x * s;
}int main ()
{memset (dp, 1e4, sizeof dp);//记得初始化 n = read (), k = read ();for (register int i (1); i <= n; ++i) a[i] = read ();sort (a + 1, a + n + 1);int tmp = a[1];for (register int i (1); i <= n; ++i) a[i] -= tmp;//记得是减去 kmp 而不是 a[1] limi = k * a[n];dp[0] = 0;for (register int i (1); i <= limi; ++i)for (register int j (1); j <= n; ++j) if (a[j] <= i) dp[i] = min (dp[i], dp[i - a[j]] + 1);for (register int i (0); i <= limi; ++i) if (dp[i] <= k) printf ("%d ", i + tmp * k);//都要加上 kmp 因为之前减去了 return 0;
}

感谢阅读~

CF632E Thief in a Shop 题解相关推荐

  1. CodeForces 632E Thief in a Shop(FFT)

    题意:n种物品每种物品有无限个,每个物品有一个价格,现在问选取k个的所以可能总价. 思路:FFT.如果只选择两件商品的话,很容易想到FFT,对于其他的k,只要类似快速幂来求即可,这样做时间复杂度为O( ...

  2. Codeforces632E Thief in a Shop(NTT + 快速幂)

    题目 Source http://codeforces.com/contest/632/problem/E Description A thief made his way to a shop. As ...

  3. Thief in a Shop

    https://codeforces.com/problemset/problem/632/E 题解:将所有元素减去最小元素 再进行完全背包 如果体积超过k则不可以. /* *@Author: STZ ...

  4. CodeForces - 632E Thief in a Shop 完全背包

    632E:http://codeforces.com/problemset/problem/632/E 参考:https://blog.csdn.net/qq_21057881/article/det ...

  5. 2021杭电多校补题——第一场

    2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...

  6. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(1)签到题15869

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:1 ...

  7. 2020年12月统考练习题

    词汇与语法B 1.He opened the letter and it contained ________. A.an important information B.some important ...

  8. 大学英语B116-2020年12月

    词汇与语法B 1.He opened the letter and it contained ________. A.an important information B.some important ...

  9. uva 10115(字符串)

    题目: Text-processing tools like awk and sed allow you to automatically perform a sequence of editing ...

  10. 2016区域赛前冲刺训练

    UPD 2016.10.23 shift-and (2题) Codeforces 训练 现在已经完成了: 191 [Codeforces Round #377] (6/6) Div 2 A Buy a ...

最新文章

  1. 2021.09 电子学会 - 软件编程(图形化)试题讲解
  2. 方程的解_NOI导刊2010提高(01) 组合数
  3. SQL2017 Azure SQL新功能:图形数据库
  4. uniCloud免费云存储图床源码
  5. NTT Docomo研究主管Kazuaki OBANA:NTT DOCOMO NFV案例解析
  6. 【Python3网络爬虫开发实战】3.1.1-发送请求
  7. 对于树分治算法的初步理解
  8. windows和linux 修改 hosts的路径
  9. Vim配置Java IDE
  10. Flutter之MediaQuery详细分析
  11. 童甫带领下的海航科技集团的无人运输船正式亮相引关注
  12. 58同城产品2面面经
  13. HTML5 CSS3初学者指南(2) – 样式化第一个网页
  14. pytorch Tensor及其基本操作
  15. SAP那些事-职业篇-36-从“固定资产清理”科目说开去
  16. matlab设置坐标数值,Matlab中描点及坐标设置相关
  17. 向亲人、故乡和“本民族”致敬的写作
  18. 最小二乘法的C语言实现
  19. coms_ov7740驱动
  20. 阿里达摩院自动驾驶负责人陈俊波离职,进军户外清洁机器人!

热门文章

  1. asp.net页面中的Console.WriteLine结果如何查看
  2. 〖Python 数据库开发实战 - MySQL篇㉒〗- 子查询的语法规则
  3. [Gym] - 100886K 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest K - Toll Roads
  4. ALPS新秀登场TRON DeFi——让每个人都可参与的社会金融
  5. 12306崩了,90%的人都用过这三款抢票工具
  6. BIOS设置中功能的翻译及介绍
  7. Notepad++ 替代品开源了!
  8. python汇率换算程序_Python第五课 汇率兑换3.0
  9. 中小型企业选择企业邮箱的好处
  10. ASPX 生成html静态页面的问题