状态压缩泛做
作者:互联网
P3052 [USACO12MAR]Cows in a Skyscraper G
预处理出每种状态的体积和,然后枚举子集转移。
时间复杂度 \(O\left(3^n\right)\)。
code:
#include<bits/stdc++.h>
using namespace std;
#define N 262144
#define Min(x,y)((x)<(y)?x:y)
#define For(i,x,y)for(i=x;i<=(y);i++)
int s[N],f[N],w[19];
int main()
{
int n,i,j;
cin>>n>>w[0];
For(i,1,n)cin>>w[i];
For(i,1,(1<<n)-1)
{
For(j,1,n)
if(i&1<<(j-1))s[i]+=w[j];
f[i]=n;
}
For(i,1,(1<<n)-1)
for(j=i;j;j=(j-1)&i)
if(s[j]<=w[0])f[i]=Min(f[i],f[i^j]+1);
cout<<f[(1<<n)-1];
return 0;
}
但是要开 O2 才能过,考虑复杂度更低的做法。
标签:状态,right,Min,压缩,262144,code,复杂度,define 来源: https://www.cnblogs.com/May-2nd/p/14371664.html