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;
    }
  • 相关阅读:
    mysql 获取字符串的长度
    mysql 字符类以及重复元字符
    mysql 字段拼接
    mysql 去除字符串中的空格
    mysql 正则表达式
    mysql 选出前五个元素
    mysql regexp 表达式
    mysql 选择所有同学名字
    mysql 获取数学成绩最高以及最低的同学
    mysql 获取单个科目的平均分
  • 原文地址:https://www.cnblogs.com/x739400043/p/8541344.html
Copyright © 2011-2022 走看看