Bootstrap

总结9..

复习了一下之前的知识点,练了些搜索题

#include<stdio.h>
int n,w,a[20],b[20],ans;
void dfs(int p,int q){
	if(q>=ans) return;
	if(p==n){
		ans=q;
		return;
	}
	for(int i=0;i<q;i++){
		if(b[i]+a[p]<=w){
			b[i]+=a[p];
			dfs(p+1,q);
			b[i]-=a[p];
		}
	}
	b[q]=a[p];
	dfs(p+1,q+1);
	b[q]=0;
}
int main()
{
	scanf("%d %d",&n,&w);
	ans=n;
	for(int i=0;i<n;i++)
	scanf("%d",&a[i]);
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-1-i;j++){
			if(a[j]<a[j+1]){
				int t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	dfs(0,0);
	printf("%d\n",ans);
	return 0;
}

#include<stdio.h>
#include<math.h>
int n,k;
long long a[21],max=0;
void dfs(int x,long long s){
	if(x==n){
		if(s>max) max=s;
		return;
	}
	dfs(x+1,s^a[x]);
	dfs(x+1,s);
}
int main()
{
	scanf("%d %d",&n,&k);
	for(int i=0;i<n;i++){
		int b,c;
		scanf("%d",&b);
		for(int j=1;j<=b;j++){
			scanf("%d",&c);
			a[i]+=1LL << (k - c);
		}
	}
	dfs(0,0);
	printf("%lld",max);
	return 0;
}
;