多重部分和问题
2016-04-02 14:46
204 查看
有n种不同大小的数字ai,每种各mi个。判断是否可以从这些数字之中选出若干使它们的和恰好为K。
输入:
3 17
3 5 8
3 2 2
输出:
Yes
输入:
3 17
3 5 8
3 2 2
输出:
Yes
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n, k, a[1000], m[1000]; int dp[1000]; void solve() { memset(dp, -1, sizeof(dp)); dp[0] = 0; for (int i = 0; i < n; i++){ for (int j = 0; j <= k; j++){ if (dp[j] >= 0){ dp[j] = m[i]; } else if (j < a[i] || dp[j - a[i]] <= 0){ dp[j] = -1; } else{ dp[j] = dp[j - a[i]] - 1; } } } if (dp[k] >= 0) printf("Yes\n"); else printf("No\n"); } int main() { while (scanf("%d%d", &n, &k) != EOF){ for (int i = 0; i < n; i++){ scanf("%d", &a[i]); } for (int i = 0; i < n; i++){ scanf("%d", &m[i]); } solve(); } return 0; }
相关文章推荐
- stm32 GPIO的8种工作模式
- HDU 5074 Hatsune Miku(DP)
- AutoMapper 使用实践
- 如何防止内存泄漏
- eclipse安装activiti工作流插件
- Haproxy 配置详解
- 关于表单的jQuery练习
- 这么巧妙思路(二)Longest Ordered Subsequence
- Android学习第四篇——使用绘图API自定义视图
- MyEclipse svn authorization failed
- 再谈React.js实现原生js拖拽效果
- Maven学习
- Android Studio处理png与.9图片问题
- 中断定时器
- 策略模式
- linux下mysql开启慢查询
- 剑指offer:平衡二叉树
- 目录-文件
- 完全背包问题
- IP TCP UDP 报文格式