簡單背包問題(0032)-swust oj
阿新 • • 發佈:2017-08-22
i++ -m put rip while () blog 簡單 pull
代碼: 遞歸,遍歷,搜索:
簡單背包問題(0032)
Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 5657 Accepted: 1714 Accepted 搜索 動態規劃設有一個背包可以放入的物品重量為S,現有n件物品,重量分別是w1,w2,w3,…wn。
問能否從這n件物品中選擇若幹件放入背包中,使得放入的重量之和正好為S。
如果有滿足條件的選擇,則此背包有解,否則此背包問題無解。
Description輸入數據有多行,包括放入的物品重量為s,物品的件數n,以及每件物品的重量(輸入數據均為正整數)
多組測試數據。
Input對於每個測試實例,若滿足條件則輸出“YES”,若不滿足則輸出“NO“
Output 20 5 1 3 5 7 9 Sample Input YES代碼: 遞歸,遍歷,搜索:
#include<iostream> using namespace std; int w[100],vis[100],k,s,n; void dfs(int sum) { if(sum==s) { k=1; } else{ for(int i=0;i<n;i++) if(vis[i]==0) { vis[i]=1; dfs(sum+w[i]); vis[i]=0; } } } int main() { int i; while(cin>>s>>n) { for(i=0;i<n;i++) cin>>w[i]; k=0; dfs(0); if(k==1) { cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } } return 0; }
簡單背包問題(0032)-swust oj