牛牛的背包問題


題目:

牛牛准備參加學校組織的春游, 出發前牛牛准備往背包里裝入一些零食, 牛牛的背包容量為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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM