首页 > 代码库 > bzoj2073: [POI2004]PRZ
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 }
bzoj2073: [POI2004]PRZ
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。