社区讨论

枚举子集的O(3^n)能不能优化过

P3052[USACO12MAR] Cows in a Skyscraper G参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6z1wn4
此快照首次捕获于
2025/11/20 13:09
4 个月前
此快照最后确认于
2025/11/20 13:09
4 个月前
查看原帖
吸氧能过,有没有玄学优化能减小常数鸭
CPP
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

const int MAX=(1<<18);
int n,W;
int val[20];
int sum[MAX];
int d[MAX];

void dfs(int x,int w,int s){
	if(x==n){
		sum[s]=w;return;
	}
	dfs(x+1,w,s);
	dfs(x+1,w+val[x],s|(1<<x));
}




int main(){
	scanf("%d%d",&n,&W);
	int i,j;
	memset(d,0x3f,sizeof(d));
	for(i=0;i<n;i++)
		scanf("%d",&val[i]);
	dfs(0,0,0);
	int all=(1<<n)-1;
	d[0]=0;
	for(i=1;i<=all;i++)
		for(j=i;j;j=(j-1)&i)
			if(sum[j]<=W)
				d[i]=min(d[i],d[i^j]+1);
	printf("%d",d[all]);
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...