Codeforces 417D
来源:互联网 发布:军鸽软件 编辑:程序博客网 时间:2024/06/06 01:35
状压DP
学到一手,位操作时注意超出int用1LL进行位操作。
还有一个就是可以用排序从小到大进行降维。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<math.h>#include<queue>using namespace std;struct node{ long long m,num,can;//开始WA了后来丧心病狂全部改longlong}node[105];long long n,m,b;bool vis[25];long long dp[1LL<<20|1];bool cmp(const struct node &a,const struct node &b){ return a.num<b.num;}int main(){ cin>>n>>m>>b; memset(vis,false,sizeof(vis)); for(int i=0;i<n;i++) { int t,a; cin>>node[i].m>>node[i].num>>t; for(int j=0;j<t;j++) { cin>>a; vis[a]=true; node[i].can|=(1LL<<(a-1)); } } int i; for(i=1;i<=m;i++) if(!vis[i]) break; if(i!=m+1) { cout<<"-1"<<endl;//判-1的情况要注意 } else { long long ans=(1LL<<60); for(int i=0;i<(1LL<<m);i++) dp[i]=(1LL<<60); sort(node,node+n,cmp); dp[0]=0; for(int i=0;i<n;i++) { for(int j=0;j<(1LL<<m);j++) { dp[j|node[i].can]=min(dp[j|node[i].can],dp[j]+node[i].m); } if(dp[(1LL<<m)-1]!=(1LL<<60)) ans=min(ans,dp[(1LL<<m)-1]+node[i].num*b);//如果最大没更新说明没有优化,不用算上这个人,否则需要加上b*num } cout<<ans<<endl; } return 0;}
0 0
- Codeforces 417D
- Codeforces 417 D. Cunning Gena
- 【CodeForces 417D】【Cunning Gena】
- codeforces 417D Cunning Gena
- Codeforces-417D总结&题解
- codeforces 417D 状压DP
- CodeForces 417D Cunning Gena 状压dp
- COdeforces#417D Cunning Gena(状压DP)
- CodeForces 617D CodeForces 617D
- CodeForces 101D
- CodeForces 103D
- CodeForces 222D Olympiad
- codeforces 242d
- CodeForces 111D
- 【codeforces】3D
- CodeForces 127D Password
- codeforces 257D. Sum
- Codeforces 292D
- uva 12563 - Jin Ge Jin Qu hao
- mysql的数据类型
- PHP的POST处理方法汇总
- xen.cfg的写法及附带的一个例子
- poj 3692 Kindergarten 二分匹配
- Codeforces 417D
- hdu 1004 Let the Balloon Rise
- 银行业务调度的理解
- jQuery 学习(四)
- 黑马程序员之集合框架2
- java线程实现方式
- 四、配置与调试
- 后缀数组模板
- LeetCode Remove Duplicates from Sorted Array II