UVA - 10817 状压DP
题意:大白P95
本题比较特别的是状压两个集合并且进行转移,因此要分别处理当前集合只有1个老师/2个老师的记录(然后可O(1)得出0个老师的集合)
记忆化过了但是迭代式不能记忆超过2的之前的状态是怎样的,除非多记录一个超过2的集合,因此无法实现(是我太菜了)
PS.偶然发现一个现象,当数组开的过大时效率会变得十分低下
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<sstream>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
#define rrep(i,j,k) for(register int i=j;i>=k;i--)
using namespace std;
const int maxn = 1e5+11;
typedef long long ll;
int s,m,n,a[maxn],aa[maxn],b[maxn],bb[maxn];
bool vis[maxn];
ll dp[123][1<<8|1][1<<8|1];//m teachers S subjects 1person 2person
ll DP(int cur,int S1,int S2){
if(cur>m+n)return S2==(1<<s)-1?0:1ll<<33;
if(~dp[cur][S1][S2]) return dp[cur][S1][S2];
int x=S1|b[cur];
int all=(1<<s)-1;
ll ans=1ll<<33;
if(cur>m) ans=DP(cur+1,S1,S2);
ans=min(ans,DP(cur+1,S1-(S1&b[cur])+(all&b[cur]),S2|(S1&b[cur]))+a[cur]);
return dp[cur][S1][S2]=ans;
}
int main(){
while(cin>>s>>m>>n){
if(s==0) break;
rep(i,1,m+n){
scanf("%d",&a[i]);
int t=0;char ch;
while(ch=getchar()){
if(ch>='0'&&ch<='9')t|=1<<(ch-'0'-1);
else if(ch=='\n'||ch==EOF)break;
}
b[i]=t;
}
// rep(i,1,n+m)cout<<b[i]<<" ";cout<<endl;
// memset(dp,0x3f,sizeof dp);
// memset(dp[0],0,sizeof dp[0]);
// for(int i=1;i<=m+n;i++){
// for(int S=0;S<=(1<<s)-1;S++){//two or one course
// for(int S0=S;S0;S0=(S0-1)&S){// one
// int one=S0,two=S^S0,zero=((1<<s)-1)^S;
// int x=zero&b[i],y=one&b[i],z=two&b[i];
// if(i<=m){
// dp[i][one][two]=dp[i-1][zero&b[i]][y|two]+a[i];
// }else{
// dp[i][one][two]=dp[i-1][zero&b[i]][y|two]+a[i];
// dp[i][one][two]=min(dp[i][one][two],dp[i-1][one][two]);
// }
// }
// }
// }
// cout<<dp[n+m][0][(1<<s)-1]<<endl;
memset(dp,-1,sizeof dp);
cout<<DP(0,0,0)<<endl;
}
return 0;
}
UVA - 10817 状压DP的更多相关文章
- UVa 10817 (状压DP + 记忆化搜索) Headmaster's Headache
题意: 一共有s(s ≤ 8)门课程,有m个在职教师,n个求职教师. 每个教师有各自的工资要求,还有他能教授的课程,可以是一门或者多门. 要求在职教师不能辞退,问如何录用应聘者,才能使得每门课只少有两 ...
- UVa 11825 (状压DP) Hackers' Crackdown
这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...
- UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
题意: 有n个长为m的各不相同的二进制数(允许存在前导0),别人已经事先想好n个数中的一个数W,你要猜出这个数. 每次只可以询问该数的第K为是否为1. 问采用最优询问策略,则最少需要询问多少次能保证猜 ...
- Hackers' Crackdown( UVA UVA 11825状压dp)
题意:N台电脑,现在有N种服务,现在你可以在每台电脑终止一项服务,他和他相邻的电脑都会被关闭,如果一项服务在所有电脑都没运行,该项服务成功被破坏,问最多能破坏几种服务. 分析:把n个集合分成尽量多组, ...
- UVA - 11795 状压DP
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...
- UVA - 11825 状压DP
该题目是EMAXX推荐的练习题,刘汝佳的书也有解说 如果S0属于全集,那S0就可以作为一个分组,那么S分组数可以是best{当前S中S0的补集+1} 对于集合类的题目我觉得有点抽象,希望多做多理解把 ...
- UVa 11795 状压DP Mega Man's Mission
kill[S]表示消灭机器人的集合为S,剩下的所能杀死的机器人集合. 设d(S)表示杀死机器人集合为S的方法数,答案为d((1<<n) - 1). d(S)可以由d(S')转移过来,其中S ...
- UVa 12235 状压DP Help Bubu
题解戳这 一开始没看懂题解,后来想明白以后,d(i, j, s, x)是考虑第i本书的时候,前面已经拿走了j本书,剩下的书的种类的二进制状态为s,剩下的最后一本书的编号为x,所能得到的最小混乱度. 这 ...
- 状压DP UVA 10817 Headmaster's Headache
题目传送门 /* 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][s2]表示s ...
随机推荐
- JavaWeb中的路径问题
JavaWEB 开发中的 / 的含义 ①.当前WEB应用的根路径(http://localhost:8080/contextPath/) 请求转发时:request.getRequestDispath ...
- scala的futue和promise
异步操作的有两个经典接口:Future和Promise,其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操 ...
- rest 参数和扩展运算符
rest 参数和扩展运算符 rest 参数的形式为 ...变量名:扩展运算符是三个点 .... rest 参数 function add(...values) { console.log(values ...
- HTTP协议相关介绍
一.HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法.HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法.HTTP1.1新增了五种请求方法:OPTIONS, ...
- wc.exe指令(C++)
https://github.com/kielingpao/wc 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.ex ...
- android 仿QQ气泡聊天界面
1.现在的QQ,微信等一些APP的聊天界面都是气泡聊天界面,左边是接收到的消息,右边是发送的消息, 这个效果其实就是一个ListView在加载它的Item的时候,分别用了不同的布局xml文件. 2.效 ...
- WebService 天气预报webservice接口
WebService 天气预报webservice接口 地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 常用接口: 1. ...
- OC自定义文档头部注释
1.创建文件 IDETemplateMacros.plist 2.向文件里添加内容 具体内容 // 文 件 名:___FILENAME___ // // 版权所有:___COPYRIGHT___ // ...
- 中国移动MIFI--CM510,4G TD-LTE MIFI 上网终端开箱及初步体验@上海
上海的,前期在4G官网报名专页登记了http://www.10086.cn/lte/recruit.html 当时由于报名结束了,所以先注册登记了信息. 1.15号中午收到10086的短信邀请,立马报 ...
- Markdown使用样例
# 欢迎使用 Cmd - 在线 Markdown 编辑阅读器 ------ 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,**Cmd Markdown** 是 ...