swun 1388 你的背包

时间:2023-03-09 17:02:10
swun 1388 你的背包

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

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

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
int v[maxn], vis[maxn];
int va, vb, ans; void DFS(int va, int vb, int cnt)
{
ans = max(ans, cnt); //ans记录最大的cnt
for(int i = ; i < ; i++)
{
if(!vis[i]) //用过的书是不能再用的
{
vis[i] = ;
if(va >= v[i]) DFS(va-v[i], vb, cnt + );//心中要有一棵递归的树
if(vb >= v[i]) DFS(va, vb-v[i], cnt + );
vis[i] = ; //这步绝对不能少,回溯。
}
}
return ;
} int main()
{
while(~scanf("%d %d", &va, &vb))
{
for(int i = ; i < ; i++) scanf("%d", &v[i]);
memset(vis, , sizeof(vis));
ans = ;
//sort(v, v + 8); //这步没影响,因为搜索枚举所有的情况。
DFS(va, vb, );
printf("%d\n", ans);
}
return ;
}