• 牛牛的背包问题


    题目:

    牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w。 
    牛牛家里一共有n袋零食, 第i袋零食体积为v[i]。 
    牛牛想知道在总体积不超过背包容量的情况下,他一共有多少种零食放法(总体积为0也算一种放法)。

    输入描述:

    输入包括两行 
    第一行为两个正整数nw,表示零食的数量和背包的容量。 
    第二行n个正整数v[i],表示每袋零食的体积。

    输出描述:

    输出一个正整数, 表示牛牛一共有多少种零食放法。

    样例:

    in:
    3 10
    1 2 4
    
    out:
    8

    名曰dp,实则搜索。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 long long v[40];
     5 int n;
     6 
     7 long long ans=0,w;
     8 
     9 void dfs(int t,long long sum){
    10     ans++;
    11     if(t==n-1){
    12         return ;
    13     }
    14     for(int i=t+1;i<n;i++){
    15         if(sum+v[i]<=w){
    16             dfs(i,sum+v[i]);
    17         }
    18     }
    19 }
    20 
    21 int main(){
    22     //long long w;
    23     cin>>n>>w;
    24     long long sum=0;
    25     for(int i=0;i<n;i++){
    26         cin>>v[i];
    27         sum+=v[i];
    28     }
    29     if(sum<=w){
    30         ans=1<<n;
    31     }
    32     else{
    33         dfs(-1,0);
    34     }
    35     cout<<ans<<endl;
    36     return 0;
    37 }
  • 相关阅读:
    分类管理模块
    Java8新特性 集合的stream的map
    条件和分页查询
    工作常用系统汇总
    Dubbo简单环境搭建
    深入浅出 TCP/IP 协议栈
    非对称加密
    理解Cookie和Session机制
    jQuery学习
    数据库系列学习(六)-函数之数学函数
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/8718305.html
Copyright © 2020-2023  润新知