Coins

思路

没分析复杂度写了个二进制拆分,然后做010101背包O(nlog(c)m)>10e7了O(nlog(c)m) > 10e7了O(nlog(c)m)>10e7了,所以还是想办法优化吧。

我们引入一个needneedneed数组,need[j]need[j]need[j]表示,在枚举到第iii件物品的时候要得到jjj这个状态,需要物品iii的最小个数。

所以在转移的时候我们只要考虑$need[j - a[i]] < c[i] ? ,如果是符合要求的,并且,如果是符合要求的,并且,如果是符合要求的,并且dp[j - a[i]]$是在此前可以达到的,

我们就标记dp[j]dp[j]dp[j]也是可以得到的,然后对need[j]=need[j−a[i]]+1need[j] = need[j - a[i]] + 1need[j]=need[j−a[i]]+1,进行数量上的累加即可。

代码

/*Author : lifehappy
*/
#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int dp[N], need[N], v[110], c[110], n, m;int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);while(scanf("%d %d", &n, &m) && (n + m)) {for(int i = 1; i <= n; i++) {scanf("%d", &v[i]);}for(int i = 1; i <= n; i++) {scanf("%d", &c[i]);}memset(dp, 0, sizeof dp);dp[0] = 1;for(int i = 1; i <= n; i++) {memset(need, 0, sizeof need);for(int j = v[i]; j <= m; j++) {if(!dp[j] && need[j - v[i]] < c[i] && dp[j - v[i]]) {dp[j] = 1;need[j] = need[j - v[i]] + 1;}}}int ans = 0;for(int i = 1; i <= m; i++) {ans += dp[i];}printf("%d\n", ans);}return 0;
}

POJ1742 Coins(DP)相关推荐

  1. LeetCode刷题记录5——441. Arranging Coins(easy)

    LeetCode刷题记录5--441. Arranging Coins(easy) 目录 LeetCode刷题记录5--441. Arranging Coins(easy) 题目 语言 思路 后记 题 ...

  2. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  3. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  4. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  5. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  6. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  7. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  8. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  9. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

最新文章

  1. mysql+实例夯住的监控_Nagios 里面监控MySQL 监控事务夯住(RUNNING)报警通知
  2. Eclipse Class Decompiler——Java反编译插件(转)
  3. 正则匹配class并替换整个class为空
  4. 计算机电脑的特点,计算机的五大特点是什么
  5. JVM学习笔记(三)------内存管理和垃圾回收【转】
  6. 艾伟_转载:编写自文档化的代码
  7. 【图像去噪】基于matlab分裂Bregman算法图像去噪【含Matlab源码 1644期】
  8. 翻译: 3.3. 线性回归的简明实现 pytorch
  9. C语言实现扫雷完整算法详解~(附完整代码~)
  10. WEEX UI 官网
  11. 博士生成长需要经历的7道门
  12. 验证短信延迟?是哪里出现问题
  13. Docker环境搭建和全终端无插件网页摄像机直播管理服务EasyNVS的部署方案详解
  14. 免费的模拟贝斯合成器-Togu Audio Line TAL-Bassline Free WiN-MAC
  15. 非计算机专业计算机教学考试,非计算机专业计算机基础课教学改革的探索和实践...
  16. 【python绘图】——删除多余的图例【图示说明】
  17. 必知的Facebook广告兴趣定位技巧,更准确地找到目标受众
  18. jdk新特性(二)stream流
  19. 在白宫插上了五星红旗!编程也能保护国家,还不好好学习吗
  20. Unity zSpace开发记录

热门文章

  1. java mysbatis select_MyBatis SELECT基本查询实现方法详解
  2. 为什么要在沙河中设置小堤坝?
  3. 遇到可爱女生如何搭讪?
  4. 心中一万只草泥马在奔腾是种怎样的体验?| 今日最佳
  5. 想不到吧?数学还有如此妙用!
  6. 如何简单形象又有趣地讲解神经网络是什么?
  7. 全球100款大数据工具汇总(前50款)
  8. c语言时间算法如何以毫秒显示,C语言时间的方法.doc
  9. python下载matplotlib.finance模块_关于Matplotlib中No module named 'matplotlib.finance'的解决办法...
  10. svn强制注释 linux,svn强制要求提交注释