bzoj2073: [POI2004]PRZ

Posted Bloodline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj2073: [POI2004]PRZ相关的知识,希望对你有一定的参考价值。

我不会枚举子集。。

首先for (x = S; x ; x = (x-1)&S)可以枚举一个集合S的所有子集 
然后可以证明枚举N个元素的子集的子集的复杂度是3^n(QAQ自己觉得是4^n所以一开始不会做...太弱...)

 

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #define rep(i,l,r) for(int i=l;i<=r;++i)
 5 using namespace std;
 6 int n,m,t[20],v[20],two[20],all,f[1023333],ti[1023333],w[1023333];
 7 int main(){
 8     scanf("%d%d",&m,&n);
 9     rep(i,1,n) scanf("%d%d",&t[i],&v[i]);
10     two[0]=1;rep(i,1,20) two[i]=two[i-1]*2;
11     all=two[n]-1;
12     memset(f,60,sizeof f); f[0]=0;
13     rep(i,1,all) rep(j,1,n) if(two[j-1]&i) w[i]+=v[j],ti[i]=max(ti[i],t[j]);
14     rep(S,1,all) for(int x=S;x;x=(x-1)&S) if(w[x]<=m) f[S]=min(f[S],f[S-x]+ti[x]);
15     printf("%d\\n",f[all]);
16 }
View Code

 

以上是关于bzoj2073: [POI2004]PRZ的主要内容,如果未能解决你的问题,请参考以下文章

bzoj2073: [POI2004]PRZ

BZOJ 2073: [POI2004]PRZ [DP 状压]

bzoj2073: [POI2004]PRZ

2073: [POI2004]PRZ

[POI2004]PRZ

BZOJ2067[Poi2004]SZN 二分+树上贪心