博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Light oj 1233 - Coin Change (III) (背包优化)
阅读量:4315 次
发布时间:2019-06-06

本文共 1163 字,大约阅读时间需要 3 分钟。

题目链接:

题目就不说明了。

背包的二进制优化,比如10可以表示为1 2 4 3,而这些数能表示1 ~ 10的任意的数。然后类似01背包就好了。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 using namespace std;13 #define INF 0x3f3f3f3f14 typedef long long LL;15 const int N = 1e5 + 5;16 int dp[N];17 int val[105], c[105];18 19 int main()20 {21 int t, n, m;22 scanf("%d", &t);23 for(int ca = 1; ca <= t; ++ca) {24 scanf("%d %d", &n, &m);25 for(int i = 1; i <= n; ++i) {26 scanf("%d", val + i);27 }28 for(int i = 1; i <= n; ++i) {29 scanf("%d", c + i);30 }31 memset(dp, 0, sizeof(dp));32 dp[0] = 1;33 for(int i = 1; i <= n; ++i) {34 for(int k = 1; k <= c[i]; k <<= 1) {35 for(int j = m; j >= k*val[i]; --j) {36 dp[j] |= dp[j - k*val[i]];37 }38 c[i] -= k;39 }40 if(c[i]) {41 for(int j = m; j >= c[i]*val[i]; --j) {42 dp[j] |= dp[j - c[i]*val[i]];43 }44 }45 }46 int ans = 0;47 for(int i = 1; i <= m; ++i) {48 ans += dp[i];49 }50 printf("Case %d: %d\n", ca, ans);51 }52 return 0;53 }

 

转载于:https://www.cnblogs.com/Recoder/p/5965081.html

你可能感兴趣的文章
MySQL 同主机不同数据库之间的复制
查看>>
iOS菜鸟开发 UIView,UIImageView 的点击事件
查看>>
取得GridView被隐藏列的值方法集合
查看>>
第七章例7-14
查看>>
SQL Server 维护计划实现数据库备份(Step by Step)
查看>>
VRPN 介绍及使用
查看>>
MyBatis使用懒加载mybatis-config.xml配置
查看>>
《C++ Primer》第五版课后习题解答_第六章(2)(08-15)
查看>>
c语言第五次作业
查看>>
多线程执行显示进度条的实例
查看>>
【总结】 NOIp2018考时经历记
查看>>
DIY远程控制开关(tiny6410+LED+yeelink+curl)
查看>>
SGU[130] CIrcle
查看>>
深入V8引擎-Time核心方法之win篇(1)
查看>>
指令操作码与地址码
查看>>
Bogo排序
查看>>
字节对齐
查看>>
基于JavaConfig配置的拦截器使用
查看>>
HTML 个人资料框
查看>>
Selenium+IDEA+Maven+TestNG环境搭建
查看>>