UVa 10817 不会子集的二进制表示法
来源:互联网 发布:靠谱的网络兼职 编辑:程序博客网 时间:2024/05/21 09:08
#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<sstream>#include<iostream>using namespace std;const int INF=0x3f3f3f3f;const int maxn=125;const int maxs=8;int s,n,m,c[maxn],st[maxn],d[maxn][1<<maxs][1<<maxs];int dp(int i,int s0,int s1,int s2){ if(i==m+n) return s2==(1<<s)-1 ? 0: INF; int& ans=d[i][s1][s2]; if(ans>=0) return ans; ans=INF; if(i>=m) ans=dp(i+1,s0,s1,s2); int m0=st[i]&s0, m1=st[i]&s1;//m0是该教师能教且现在没人教的科目,m1是能教且现在只有一个人教的集合 s0^=m0;s1=(s1^m1)|m0;s2|=m1; ans=min(ans,c[i]+dp(i+1,s0,s1,s2)); return ans;}int main(){ string line; int x; while(getline(cin,line)) { stringstream ss(line); ss>>s>>m>>n; if(s==0) break; memset(st,0,sizeof(st)); for(int i=0;i<m+n;i++) { getline(cin,line); stringstream ss(line); ss>>c[i]; while(ss>>x) st[i]|=(1<<(x-1)); } memset(d,-1,sizeof(d)); printf("%d\n",dp(0,(1<<s)-1,0,0)); } return 0;}还不是很理解这个啊,主要是二进制的这个理解的还不够,代码完全复制,需要学习啊。
0 0
- UVa 10817 不会子集的二进制表示法
- UVa 1252该类的子集的二进制表示方法还需要学习
- 子集生成 二进制表示
- 枚举一个数二进制表示下的子集
- 求一个二进制数的(二进制表示)的所有子集
- 子集的二进制算法
- 二进制形成集合的子集
- 二进制输出所有的子集
- 二进制枚举法枚举子集
- -1的二进制表示
- 负数的二进制表示
- 负数的二进制表示
- 集合的二进制表示。
- 小数的二进制表示
- -1 的 二进制表示
- C的二进制表示
- 负数的二进制表示
- 负数的二进制表示
- win8.1 安装Oracle 10g 32位 出错解决办法
- 使用百度地图报错:Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败
- python之TypeError: this constructor takes no arguments
- Bluetooth-->蓝牙开发之状态判断
- 杭电-2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
- UVa 10817 不会子集的二进制表示法
- swipe的基础使用(二十六)
- QT 基本图形绘制
- mysql ALTER 语句的使用
- POJ3045-Cow Acrobats
- javaweb学习总结(五)——Servlet开发(一)
- PHP如何随机生成一个唯一的id
- 分布式事务处理方案
- java代码读取excel文件,同时兼容2003和2007