牛牛的背包问题

Posted Kiven#5197

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛牛的背包问题相关的知识,希望对你有一定的参考价值。

题目:

牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为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 }

 

以上是关于牛牛的背包问题的主要内容,如果未能解决你的问题,请参考以下文章

[置换 前缀和]牛牛的猜球游戏

牛牛的猜球游戏(动态规划+前缀影响)

牛牛的闹钟

谈谈Google与微信H5牛牛的Java开发规范

十三水,十三张,斗地主,牛牛的牌型搜索思考

牛牛的数列 最长递增子序列