bzoj 3900: 交换茸角
3900: 交换茸角
Description
Input
Output
Sample Input
3 3
2 5
2 5
Sample Output
HINT
对于 100% 的数据,n <= 16, c <= 1000000, 每支茸角重量不超过 1000000。
网上都没人写题解,还是自己写一发吧。。。
怎么说呢,n<=16是一个突破口,我们肯定要往状压上想。。
刚开始我是直接枚举状态中哪两个互相交换,但最后发现有反例,比如:
3 1
1 3
2 4
3 5
一头鹿可以进行好几次交换。。
然后改变思路,发现这题和某次的topcoder的juice有点像,先预处理出i状态下让每一头鹿进行交换的最小交换次数,如果可行的话,那么答案就是鹿的个数减1(好好想想),接下来就很简单了。。
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int n,m,i,j,k,p,c[40],a[20],b[20],f[(1<<16)+5];
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<(1<<n);i++)
{
k=0;p=0;
for(j=0;(1<<j)<=i;j++)
if(1<<j&i)
{
if(abs(a[j+1]-b[j+1])>m) p=1;
k++;
c[k]=a[j+1];
k++;
c[k]=b[j+1];
}
if(p==0) f[i]=0;else
{
sort(c+1,c+k+1);
p=0;
for(j=1;j<=k;j+=2)
if(c[j+1]-c[j]>m) {p=1;break;}
if(p==1) f[i]=1e9;else f[i]=k/2-1;
}
}
for(i=1;i<(1<<n);i++)
for(j=(i-1)&i;j>0;j=(j-1)&i)
f[i]=min(f[i],f[j]+f[i^j]);
if(f[(1<<n)-1]==1e9) cout<<"-1";else cout<<f[(1<<n)-1];
return 0;
}
bzoj 3900: 交换茸角的更多相关文章
- bzoj千题计划240:bzoj3900: 交换茸角
http://www.lydsy.com/JudgeOnline/problem.php?id=3900 dp[i]表示让状态为i的鹿满足要求的最少交换次数 不能枚举两头鹿交换,因为一头鹿可能交换多次 ...
- bzoj3900 交换茸角
题目链接 思路 看到n比较小,可以状压. 可以先考虑什么情况下会无法平衡.显然就是排完序之后两两相邻的不能满足小于等于c的限制. 状态.用f[i]来表示i集合中的鹿完成交换所需要的次数. 预处理.无法 ...
- BZOJ 2668 交换棋子(费用流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2668 题意:有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子中的棋子,最终达到目标状 ...
- [BZOJ 2668] 交换棋子
Link: BZOJ 2668 传送门 Solution: 重点在于对于每条转移路径:首尾算一次,中间节点算两次 可以一点拆三点,将原流量拆成入流量和出流量 但其实也可以就拆两点,分前后是否是一首尾点 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- DP&图论 DAY 3 上午
DP&图论 DAY 3 上午 状态压缩dp >状态压缩dp ◦状态压缩是设计dp状态的一种方式.◦当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维 ...
- 状态压缩dp相关
状态压缩dp 状态压缩是设计dp状态的一种方式. 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总 量很少是,可以将多维状态压缩为一维来记录. 这种题目最明显的特征就是: 都存在某一给 ...
- 状压dp(8.8上午)
神马是状态压缩? 就是当普通dp的每一维表示的状态非常少的时候,可以压缩成一维来表示 如果m==8 dp[i][0/1][0/1]......[0/1] 压缩一下 dp[i][s]表示到了第i行,状态 ...
- DAY 3 上午
状压DP 状态压缩dp 状态压缩是设计dp状态的一种方式. 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少时,可以将多维状态压缩为一维来记录. 这种题目最明显的特征就是:都存在 ...
随机推荐
- js刷新页面方法 -- (转)
1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里 ...
- 一个无线通信类投稿的期刊list
转载一个,但是有些期刊的影响因子不是很对,要投的时候还是再到期刊主页上面看一看吧~ 期刊缩写 期刊全名 近年影响因子 P IEEE Proceedings Of The IEEE 3.686 IEEE ...
- 网站服务器压力Web性能测试(2):Webbench:最多模拟3万个并发连接数测试压力
1.Webbench最多可以模拟3万个并发连接数来测试服务器压力,可以设置压力测试时间和测试请求的成功率.安装Webbench命令: wget https://home.tiscali.cz/~cz2 ...
- Hierarchical Attention Based Semi-supervised Network Representation Learning
Hierarchical Attention Based Semi-supervised Network Representation Learning 1. 任务 给定:节点信息网络 目标:为每个节 ...
- python_day7学习笔记
类 1)创建一个类 #coding=utf-8 __author__ = 'Administrator' class Employee: '所有员工的基类' empCount = 0 def __in ...
- linux命令(37):locate命令
1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期 ...
- sharding-JDBC 实现读写分离
需求 一主两从,做读写分离. 多个从库之间实现负载均衡. 可手动强制部分读请求到主库上.(因为主从同步有延迟,对实时性要求高的系统,可以将部分读请求也走主库) 本次不讨论 MySQL如何配置主从同步相 ...
- 用vue-cli来搭建vue项目和webpack
vue-cli 用vue-cli来搭建vue项目 第一步:全局安装vue-cli sudo npm install vue-cli -g 第二步:初始化一个项目 vue init webpack-si ...
- windows10 易升 下载失败 解决方法
在你剩余最大空间的硬盘里有一个名字大概是Windows10Updata的文件夹里找到一个名字14339开头的升级镜像,把这个文件的名字用记事本保存下来方便以后使用,同时在这个文件夹里还有一个叫prod ...
- 四十八 常用内建模块 HTMLParser
如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻.图片还是视频. 假设第一步已经完成了,第二步应该如何解析HTML呢? HTML ...