小偷的背包(0963)

设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。如果有满足条件的选择,则此背包有解,否则此背包问题无解。

Description

第一行为物品重量S(整数); 第二行为物品数量n, 第三行为n件物品的重量的序列。

Input

有解就输出“yes!”,没有解就输出“no!”。

Output

1

2

3

4

20

5

1 3 5 7 9

Sample Input

1

yes!

#include<iostream>
using namespace std;
int a[100];
int fun(int w, int n)
{
    if (w == 0)return 1;
    if (w != 0 && n == 0)return 0;
    if (fun(w - a[n], n - 1))return 1;
    return fun(w, n - 1);
}
int main()
{
    int w, n;
    cin >> w >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    if (fun(w, n))
        cout << "yes!";
    else
        cout << "no!";
    return 0;
}

时间: 2024-10-10 06:47:44

小偷的背包(0963)的相关文章

ACM-小偷的背包

题目描述:小偷的背包 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,...,wn.问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S.如果有满足条件的选择,则此背包有解,否则此背包问题无解. 输入 第一行为物品重量S(整数): 第二行为物品数量n, 第三行为n件物品的重量的序列. 输出 有解就输出”yes!“,没有解就输出”no!“. 样例输入 20 5 1 3 5 7 9 样例输出 yes! 思路:水题,直接DFS即可. // 小偷的背包.cp

编程思想与算法

常用编程思想与算法 本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的事例,对基础算法感兴趣的朋友可以阅读原文.由于本人也是编程初学者,所以本书比较浅显易懂,所介绍的算法配上插图也十分易懂,这里只是介绍几种最基础的算法由浅入深以帮助理顺一些简单的思维逻辑. 算法简介 算法是一组完成任务的指令.任何代码片段都可视为算法,我们这里讨论的算法要么速度快,要么能解决有趣的问题,要么兼而有之. 二

常用编程思想与算法

本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的事例,对基础算法感兴趣的朋友可以阅读原文.由于本人也是编程初学者,所以本书比较浅显易懂,所介绍的算法配上插图也十分易懂,这里只是介绍几种最基础的算法由浅入深以帮助理顺一些简单的思维逻辑. 算法简介 算法是一组完成任务的指令.任何代码片段都可视为算法,我们这里讨论的算法要么速度快,要么能解决有趣的问题,要么兼而有之. 二分查找 二分查找是一

Codeforces Round #361 div2

ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: 1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <ctime> 6 #include <set> 7 #incl

0-1背包问题(0-1 knapsack problem)

0-1背包问题描述:一个正在抢劫商店的小偷发现了n个商品,第i个商品价值 vi 美元,重 wi 磅,vi 和 wi 都是整数.这个小偷希望拿走价值尽量高的商品,但他的背包最多能容纳 S 磅重的商品,S 是一个整数,那么他应该如何拿才能使得背包中的商品价值之和最大. 0-1背包问题的特点在于这类问题只能做出二元选择,比如上面描述的问题中每个商品不可拆分,小偷要么把它拿走,要么把它留下:不能拿走商品的一部分.所以有可能最后结果小偷的背包还有多余的空间,但却不能再多放商店的商品了.这也是使用动态规划求

hdu 2955 Robberies(背包DP)

题意: 小偷去抢银行,他母亲很担心. 他母亲希望他被抓的概率真不超过P.小偷打算去抢N个银行,每个银行有两个值Mi.Pi,Mi:抢第i个银行所获得的财产 Pi:抢第i个银行被抓的概率 求最多能抢得多少财产. 思路: 由于概率不是整数,所以不能将其作为背包容量.继续观察,发现Mi是整数,调整思路可发现,可以将财产作为背包容量,求一定财产内的被抓的最小概率.这样只需要判断这个概率是否小于等于P即可. 代码: double P; int N; int m[105]; double p[105]; do

动态规划(背包题目)

完全背包 hdu 1248 寒冰王座 hdu 1284 钱币兑换问题 hdu 3732 Ahui Writes Word:将01背包转化为多重背包,即完全背包. 0-1背包 hdu 2546 饭卡:因为要占最大的便宜,所以留5元买最贵的菜,因为每种菜只能买一次,用0-1背包 求出买菜用的最大支出 hdu 3466 Proud Merchants:当钱少于Qi时,不将物品卖出,计算过程中要注意方程无后效性,对 Pi-Qi进行排序,小的排在前面.然后用0-1背包解题,其中的约束条件为拥有的钱不少于Q

(背包dp)HDU - 2955 Robberies

原题链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2955 (可能失效) 题意:小偷抢劫n个银行,每个银行有两个属性,m为拥有的库存金额,p为小偷偷这个银行被抓的概率.小偷抢银行的总被抓概率不能超过V.求最多抢到的金额. 分析:这题拿到手很容易想到把概率*100,以总概率V为背包容积,以抢到的金额为价值跑01背包. 但是确实本题坑之所在.WA了好多发. 看了大神博客才明白,这里需要一个转化,直接跑以总金额sum为容积,不被抓的概率为价值的背

Robberies 01背包变形 hdoj

在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包.不能讲物品i装入多次,也不能只装入物品的一部分.因此,该问题被称为0-1背包问题. 将小偷计划要偷的钱的总数作为背包的容量,然后每个银行的存款就作为各个物品的重量, 每个银行小偷的逃跑率就作为每个物品的价值,这样就转化为01背包问题了. 至于为什么不可以用题目给的被抓获的概率作为价值,是因为小偷被抓与否的计算方法, 不是将每个银行小偷被抓的概率相乘,概率论的基本知识,所以要以逃跑率作为价值. 定义数组 F[j]为偷到j万元的时候