状压dp初探
写了几道状压。。。然后就一直在颓废。。。
2064: 分裂
http://www.lydsy.com/JudgeOnline/problem.php?id=2064
初始的为正,最后的为负,假设我们能找到k组凑成0的话,答案就是n+m-2*k。于是状压。。其实我一点都不会。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define maxn 1<<22
using namespace std;
int t,mm,f[maxn],sum[maxn],ans,n,m,a[],b[];
int main(){
scanf("%d",&n);
rep(i,,n-) scanf("%d",&a[i]);
scanf("%d",&m);
rep(i,,m-) scanf("%d",&b[i]);
rep(i,,n-) sum[<<i]=a[i];
rep(i,n,n+m-) sum[<<i]=-b[i-n];
mm=<<(n+m);
rep(i,,mm-){
t=i&(-i);
sum[i]=sum[t]+sum[i-t];
rep(j,,m+n-)
if ((<<j)&i) f[i]=max(f[i],f[i^(<<j)]);
if (!sum[i]) ++f[i];
}
printf("%d\n",n+m-*f[mm-]);
return ;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define maxn 5000
#define mm 100000000
int y,sum,tot,ans,ff[][maxn],f[][maxn],g[][maxn],d[maxn],map[][],n,m;
using namespace std;
void dfs(int x){
if (x>m) {
d[y]=++tot;
g[y][tot]=sum;
ff[y][tot]=ans;
return;
}
if (map[y][x]==){
sum+=(<<(x-));
ans++;
dfs(x+);
sum-=(<<(x-));
ans--;
}
dfs(x+);
}
int main(){
scanf("%d%d",&n,&m);
rep(i,,n)
rep(j,,m) scanf("%d",&map[i][j]);
rep(i,,n){
tot=ans=sum=;
y=i;
dfs();
}
ans=;
if (n==) printf("%d\n",d[]);
else {
rep(i,,d[]) f[][i]=;
rep(i,,n)
rep(j,,d[i])
rep(k,,d[i-]){
if ((g[i][j]&g[i-][k])==) f[i][j]=(f[i][j]+f[i-][k])%mm;
}
rep(i,,d[n]) ans=(ans+f[n][i])%mm;
printf("%d",ans);
}
return ;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define ll long long
#define maxn 70000
ll f[maxn][],mm,ans;
int n,m,a[];
int main(){
scanf("%d%d",&n,&m);
rep(i,,n) scanf("%d",&a[i]);
rep(i,,n-) f[<<i][i+]=;
mm=(<<n)-;
rep(i,,mm)
rep(j,,n) if (<<(j-)&i)
rep(k,,n) if ((<<(k-)|i)!=i&&abs(a[k]-a[j])>m) f[i|<<(k-)][k]+=f[i][j];
rep(i,,n) ans+=f[mm][i];
printf("%lld\n",ans);
return ;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define ll long long
#define maxn 70000
using namespace std;
int mm,n,m,a[],b[],t[],w[maxn],tim[maxn],f[maxn];
int main(){
scanf("%d%d",&m,&n);
rep(i,,n) scanf("%d%d",&a[i],&b[i]),t[i]=<<(i-);
mm=(<<n)-;
rep(i,,mm)
rep(j,,n) if (t[j]&i) tim[i]=max(tim[i],a[j]),w[i]+=b[j];
memset(f,/,sizeof(f)); f[]=;
rep(i,,mm)
for(int j=i;j;j=i&(j-))
if (w[j]<=m) f[i]=min(f[i],tim[j]+f[i^j]);
printf("%d\n",f[mm]);
return ;
}
状压dp初探的更多相关文章
- 状压DP初探·总结
2018过农历新年这几天,学了一下状态压缩动态规划,现在先总结一下. 状态压缩其实是一种并没有改变dp本质的优化方法,阶段还是要照分,状态还是老样子,决策依旧要做,转移方程还是得列,最优还是最优, ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
随机推荐
- iis 10 ftp 被动模式配置
第一步: 进入 Server Level 的FTP Firewall Support 第二步: 在 Data Channel Port Range 下配置 Passive mode 的端口号范围,注意 ...
- 关于MAX()函数的一点思考
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/103 考虑如下表和sql: CREATE TABLE `ikno ...
- Docker(四):Docker基本网络配置
1.Libnetwork Libnetwork提出了新的容器网络模型简称为CNM,定义了标准的API用于为容器配置网络. CNM三个重要概念: 沙盒:一个隔离的网络运行环境,保存了容器网络栈的配置,包 ...
- js遍历 子节点 子元素
Js 节点 子元素 属性 方法 // 添加子节点前 删除所有子节点 var usernameEle = document.getElementById("username"); v ...
- vim置于后台,vim 编辑多文件
这里介绍一个很实用的方法:1.将vim置于后台,直接按 ctrl + z可以将当前的vim置于后台 2.然后可以去别的目录再打开一个 当你需要打开之前的vim的时候3.打jobs命令看当前有哪些vim ...
- Django学习日记07_Admin
django.contrib django.contrib是django中附带的一个工具集,由很多的附加组件组成.这些附加组件包括管理工具(django.contrib.admin).用户鉴别系统(d ...
- 宇宙探索特工队&scrum
对scrum的一些理解 Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责 ...
- 微信小程序之页面路由
路由方式 简介 对于路由的触发方式以及页面生命周期函数如下: 路由方式 触发时机 路由前页面 路由后页面 初始化 小程序打开的第一个页面 onLoad, onSHow 打开新页面 调用 API w ...
- git应用套路
git应用套路 一. 配置git别名 1.通过控制台命令vim ~/.gitconfig打开配置页面 2.配置如下内容: [user] name = your Name email = your E- ...
- (7拾遗)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html2环境架设http://www.cn ...