算法竞赛宝典–油桶问题
题目描述
楚继光扬扬得意道:“当日华山论剑,先是他用黯然销魂掌破了我的七十二路空明拳,然后我改打降龙十八掌,却不防他伸开食指和中指,竟是六脉神剑,又胜我一筹。可见天下武学彼此克制,武学之道玄之又玄!……哎,谁用炒锅敲我头?”

楚继光的老妈大声骂道:“玩个石头剪刀布都说得这般威风,炒菜没油了,快给我去装!”

“这么凶干嘛?不就吹吹牛嘛。”楚继光边嘟嘟囔囔边走进储藏室,看到储藏室有N个油桶都装满了油,这N个油桶容积各不相同(容积为整数),楚继光需要M升油(M也为整数),请你不借助任何其他容器,判断能否直接在N桶油中取任意K桶(1≤K≤N)油,其油的总量正好是M升,如果可以,就输出yes,否则输出no。
输入
第一行为两个整数N,M,第二行为N个整数,即油桶的容积。
输出
输出结果即yes或者no。
样例输入
5 10
1 2 3 1 1
样例输出
no

递归搜索法
递归出口
剪枝
递归搜索策略部分
/*
油桶问题
*/

#include <iostream>
#include <algorithm>
using namespace std;
int n, M, oil[100];
// 这个递归搜索遍历了所有的组合可能一定能得出答案
int DFS(int sum, int k) {  // sum表示已经取了多少油,再处理第k桶油 if (k > n) return 0;if (sum >= M) {if (sum == M) return 1;return 0;}// 对于第k桶油有两种情况, 取或不取 if (DFS(sum+oil[k], k+1) == 1) return 1;if (DFS(sum, k+1) == 1) return 1;return 0;
}
int main() {cin >> n >> M;for (int i = 1; i <= n; i++) cin >> oil[i];if (DFS(0, 1)) cout << "yes\n";else cout << "no\n"; return 0;
}

/*
01背包解法
n桶油 每桶油的价值等于体积
问能不能尽可能的装满容量为M的背包使之价值最大
现在的问题是能否恰好装满背包
*/

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f
// dp[i][j]表示前i桶油背包容量为j时的最大价值
// 边界 dp[i][0] = 0
// 转移方程 dp[i][j] = max(dp[i-1][j], dp[i-1][j-oil[k]] + oil[k]);
// 进行优化成一维数组
int dp[100];
int oil[100];
int main() {int n , M;while (cin >> n >> M) {for (int i = 1; i <= n; i++) cin >> oil[i];memset(dp, -INF, sizeof(dp));// 当要求最小值时,只要初始化为INF即可dp[0] = 0; // 表示恰好能装满 比如dp[j-oil[i]] 而j容量刚好等于oil[i]物体体积 // 递归的思想就相当于递归出口 for (int i = 1; i <= n; i++) {for (int j = M; j >= oil[i]; j--) {dp[j] = max(dp[j], dp[j-oil[i]]+oil[i]);}}if (dp[M] == M) cout << "yes\n";else cout << "no\n";}return 0;
}

sincerit 算法竞赛宝典--油桶问题相关推荐

  1. 算法竞赛宝典-递推算法

    算法竞赛宝典-递推算法 Problem A [递推]挖地雷 待更新 问题 B: [递推]偶数3的个数 时间限制: 1 Sec 内存限制: 64 MB 题目描述 "报告,我军已探出地雷阵中所有 ...

  2. 普通背包问题-枚举算法(《算法竞赛宝典》 第二部 基础算法艺术)

    #include <iostream> #include <cstdlib> using namespace std; int N,S; int W[40];// 初始化每个物 ...

  3. 算法竞赛宝典 分治算法 聪明的质检员

    题目:聪明的质监员(qc.pas/cpp/in/out) 题目描述 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n 个矿石,从1到n 逐一编号,每个矿石都有自己的重量wi 以及价 ...

  4. 算法竞赛宝典 棋子移动 递归

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 棋子移动

  5. 【竞赛相关】Kaggle竞赛宝典国内外竞赛方案汇总

    本文汇总了kaggle竞赛宝典将近50个竞赛的Top方案&思路&代码. 2019年度所有国内外竞赛汇总 干货 | 2019 数据竞赛TOP方案合集 数据竞赛2019年度年鉴发布(250 ...

  6. 【数据竞赛】Kaggle竞赛宝典国内外竞赛方案汇总

    本文汇总了kaggle竞赛宝典将近50个竞赛的Top方案&思路&代码.关注"kaggle竞赛宝典"并在后台输入"竞赛宝典",还将获得5个kagg ...

  7. 太强了!Kaggle竞赛宝典方案汇总

    kaggle竞赛宝典公众号建立的初衷是希望将很多经典比赛的方案写成案例的形式,每个步骤都配有一定的阐述,讲述某些操作为什么有效等,希望可以帮助更多的新手快速入门(太多的开源只有代码,看代码的时间是巨大 ...

  8. 【新书推荐】机器学习算法竞赛实战,Kaggle Grandmaster倾力打造,涵盖Kaggle、天池等赛题...

    关注公众号,发现CV技术之美 随着互联网时代的到来,以及计算机硬件性能的提升,人工智能在近几年可以说是得到了爆发式的增长.互联网时代带来了大量的信息,这些信息是名副其实的大数据.另外,性能极佳的硬件也 ...

  9. Kaggle竞赛宝典方案汇总

    kaggle竞赛宝典公众号建立的初衷是希望将很多经典比赛的方案写成案例的形式,每个步骤都配有一定的阐述,讲述某些操作为什么有效等,希望可以帮助更多的新手快速入门(太多的开源只有代码,看代码的时间是巨大 ...

最新文章

  1. Rust crates.io换国内镜像源
  2. VMRC控制台的连接已断开..正在尝试重新连接
  3. mongodb cond 模糊查询_为了实现在线库的复杂查询,你还在双写吗?
  4. 【Leetcode】打家劫舍 I and 打家劫舍 II(动态规划)PYTHON
  5. SpringBoot整合quartz的一个例子
  6. MySQL8.0.19解压安装教程
  7. 针对2020年市面上短信供应商的对比(8家SMS供应商对比)
  8. 深度技术官网linux,深度系统
  9. python12306抢票_python实现12306抢票
  10. Python pyd文件的制作和编译,以及程序源代码的保护
  11. 图的割点(解释及实现)
  12. Win10开机(更新)后无法进入系统,黑屏一直转圈
  13. 居然能查看微信访客记录,这款神器牛逼了。
  14. CNN(Convolutional Neural Network)
  15. dws公共汇总粒度事实层设计
  16. 红米Note 4超简单刷成开发版获取ROOT权限的流程
  17. AI贺新年,开发者的虎年这样过才有意思
  18. 冀教版三年级计算机技术教案,冀教版三年级信息技术教案
  19. Docker下redis与springboot三部曲之三:springboot下访问redis哨兵
  20. VFP视频教程计划启动

热门文章

  1. 模拟登录学校教务系统网站
  2. 如果没事儿 我应做些什么?
  3. DAU、eCPM、ARPU是个什么鬼?不懂这些就是没入行!还有救
  4. Javaweb企业员工信息管理系统
  5. 爱因斯坦场方程之Reissner-Nordstrom(电磁真空)解
  6. 解决win10,64位系统下 PL2303 USB转串口驱动问题
  7. c语言3个数最大公约数和最小公倍数,初学c语言【3】欧几里得算法求最小公倍数和最大公约数...
  8. hihoCoder #1073 光棍节
  9. 使用jquery.fly插件实现添加购物车抛物动画
  10. jQuery的常见选择器和筛选器