【JZOJ2108】买装备【dfs】

题目大意:

题目链接:https://jzoj.net/junior/#main/show/2108
nn个物品,每个物品有a,ba,b两种元素,选择若干个物品使得aA,bB\sum a\geq A,\sum b\geq B


思路:

这**题背包确实可以做,但是n21n\leq 21的数据为什么不打搜索呢?
就是一个简单的O(2n)O(2^n)爆搜,简单到不能再简单了。。。


代码:

#include <cstdio>
using namespace std;

const int N=30;
int n,A,B,a[N],b[N],w[N],ans=2e9;

void dfs(int x,int suma,int sumb,int m)
{
	if (x>n)
	{
		if (suma>=A&&sumb>=B&&m<ans)
			ans=m;
		return;
	}
	dfs(x+1,suma+a[x],sumb+b[x],m+w[x]);
	dfs(x+1,suma,sumb,m);
}

int main()
{
	scanf("%d%d%d",&A,&B,&n);
	for (int i=1;i<=n;i++)
		scanf("%d%d%d",&a[i],&b[i],&w[i]);
	dfs(1,0,0,0);
	printf("%d",ans);
	return 0;
} 
posted @ 2019-05-11 13:58  全OI最菜  阅读(103)  评论(0编辑  收藏  举报