swun 1388 你的背包

解题思路:这题给人的第一反应是背包,第二反应是贪心,我用的是搜索,枚举就可以,要有这种意识,

    题目数据只有8个,暴力是可以解决的。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn = 10;
 6 int v[maxn], vis[maxn];
 7 int va, vb, ans;
 8 
 9 void DFS(int va, int vb, int cnt)
10 {
11     ans = max(ans, cnt); //ans记录最大的cnt
12     for(int i = 0; i < 8; i++)
13     {
14         if(!vis[i])    //用过的书是不能再用的
15         {
16             vis[i] = 1;
17             if(va >= v[i]) DFS(va-v[i], vb, cnt + 1);//心中要有一棵递归的树
18             if(vb >= v[i]) DFS(va, vb-v[i], cnt + 1);
19             vis[i] = 0; //这步绝对不能少,回溯。
20         }
21     }
22     return ;
23 }
24 
25 int main()
26 {
27     while(~scanf("%d %d", &va, &vb))
28     {
29         for(int i = 0; i < 8; i++) scanf("%d", &v[i]);
30         memset(vis, 0, sizeof(vis));
31         ans = 0;
32         //sort(v, v + 8); //这步没影响,因为搜索枚举所有的情况。
33         DFS(va, vb, 0);
34         printf("%d
", ans);
35     }
36     return 0;
37 }
View Code
原文地址:https://www.cnblogs.com/loveprincess/p/4802795.html