zoukankan      html  css  js  c++  java
  • ACM-小偷的背包

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

    输入

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

    输出

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

    样例输入

    20
    5
    1 3 5 7 9
    

    样例输出

    yes!

    思路:水题,直接DFS即可。

    // 小偷的背包.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    
    #include<iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    const int MAX = 100;
    int s, n,flag, w[MAX];
    
    void DFS(int pos,int cost)
    {
        //cout << "pos:" << pos << "	cur.len:" << cur.len << "	cur.cost:" << cur.cost << endl;
    
        if (cost == s)
        {
            flag = 1;
            return;
        }
    
        if (pos > n) return;
    
        DFS(pos + 1, cost + w[pos]);
    
        DFS(pos + 1, cost);
    
    }
    
    int main()
    {
        int sum = 0;
        cin >> s >> n;
        for (int i = 0; i < n; i++)
        {
            cin >> w[i];
            sum += w[i];
        }
    
        if (sum < s) { cout << "no!"; return 0; }
    
        flag = 0;    
        DFS(0, 0);
    
        if (flag) cout << "yes!";
        else cout << "no!";
    
    
        return 0;
    }
  • 相关阅读:
    seriviceWorker 小结
    Number.prototype.toLocalString() js
    浏览器h5新建文件 保存到本地(相当于浏览器写文件)
    ios 当margin-left margin-right 超过设备宽度
    数组变char
    字符窜转数字
    stream 的方式遍历
    LinkedHashSet 去掉重复数据
    前端判断是否为空字符窜
    前端去掉空格的方法
  • 原文地址:https://www.cnblogs.com/x739400043/p/8541344.html
Copyright © 2011-2022 走看看