hdu6149 Valley Numer II 分组背包+状态压缩
/**
题目:hdu6149 Valley Numer II
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149
题意:
众所周知,度度熊非常喜欢图。
为了形成山谷,首先要将一个图的顶点标记为高点或者低点。
标记完成后如果一个顶点三元组<X, Y, Z>中,
X和Y之间有边,Y与Z之间也有边,同时X和Z是高点,Y是低点,那么它们就构成一个valley。
度度熊想知道一个无向图中最多可以构成多少个valley,一个顶点最多只能出现在一个valley中。
● 1≤T≤20
● 1≤N≤30
● 1≤M≤N*(N-1)/2
● 0≤K≤min(N,15)
● 1≤Xi, Yi≤N, Xi!=Yi
● 1≤Vi≤N
思路:由于k最大是15,所以可以分组背包+状态压缩 因为每两个高点和一个低点才能构成一个三元组,k最大15,所以最多7个三元组; 所有的低点作为分组条件。
每一组存入可以和该低点构成三元组的pair<x,z>,用s表示状态; dp[i][s]表示放入i体积,高点状态为s可以获得的最多三元组; dp[i][s] = max(dp[i][s],dp[i-1][s-s1]+1) (s&(s1)==0) ps:自己老是在这个地方搞错,dp[7][i]这里的第一维要开到8以上!!! */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <iostream>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
typedef long long LL;
#define ms(x,y) memset(x,y,sizeof x)
typedef pair<int, int> P;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + ;
const int N =;
int dp[][<<];
vector<int> v[];
int f[][];
int gao[], pos[];
vector<int> g;
int main()
{
int T;
int n, m, k;
cin>>T;
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
ms(f,);
int x, y;
for(int i = ; i <= m; i++){
scanf("%d%d",&x,&y);
f[x][y] = ;
f[y][x] = ;
}
ms(gao,);
g.clear();
for(int i = ; i <= k; i++){
scanf("%d",&x);
pos[x] = i-;
g.push_back(x);
gao[x] = ;
}
for(int i = ; i<= n; i++) v[i].clear();
for(int i = ; i <= n; i++){
if(gao[i]==){
for(int j = ; j<g.size();j++){
for(int z = j+; z <g.size(); z++){
if(f[i][g[j]]&&f[i][g[z]]){
v[i].push_back((<<pos[g[j]])|(<<pos[g[z]]));
}
}
}
}
}
memset(dp, -inf, sizeof dp);
dp[][] = ;
int len = <<k;
for(int i = ; i <= n; i++){
if(gao[i]||(int)v[i].size()==) continue;
for(int j = ; j >= ; j--){
for(int x = ; x < v[i].size(); x++){
for(int y = ; y < len; y++){
if((y&v[i][x])==v[i][x]){
dp[j][y] = max(dp[j][y],dp[j-][y-v[i][x]]+);
}
}
}
}
}
int mas = ;
for(int i = ; i <= ; i++){
for(int j = ; j < len; j++){
mas = max(mas,dp[i][j]);
}
}
printf("%d\n",mas);
}
return ;
}
hdu6149 Valley Numer II 分组背包+状态压缩的更多相关文章
- hdu6125 Free from square 分组背包+状态压缩
/** 题目:hdu6125 Free from square 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6125 题意: 从不大于n的所有正整数中选出 ...
- POJ-2923 Relocation---01背包+状态压缩
题目链接: https://vjudge.net/problem/POJ-2923 题目大意: 有n个货物,给出每个货物的重量,每次用容量为c1,c2的火车运输,问最少需要运送多少次可以将货物运完 思 ...
- HDU 6149 Valley Numer II(状压DP)
题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...
- POJ 2923 【01背包+状态压缩/状压DP】
题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...
- POJ 2923 Relocation(01背包+状态压缩)
题意:有人要搬家,有两辆车可以运送,有若干家具,车有容量限制,而家具也有体积,那么如何运送会使得运送车次最少?规定两车必须一起走,两车一次来回只算1躺. 思路:家具怎么挑的问题,每趟车有两种可能:1带 ...
- HDU 6149 Valley Numer II (状压DP 易错题)
题目大意:给你一个无向连通图(n<=30),点分为高点和低点,高点数量<=15,如果两个高点和低点都直接连边,那么我们称这三个点形成一个valley,每个点最多作为一个valley的组成部 ...
- HDU 6149 Valley Numer II 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...
- 百度之星复赛T6&&hd6149 ——Valley Numer II
Problem Description 众所周知,度度熊非常喜欢图. 它最近发现了图中也是可以出现 valley —— 山谷的,像下面这张图. 为了形成山谷,首先要将一个图的顶点标记为高点或者低点.标 ...
- HDU 6125 Free from square 状态压缩DP + 分组背包
Free from square Problem Description There is a set including all positive integers that are not mor ...
随机推荐
- RSA 公钥加密——私钥解密
作者:刘巍然-学酥链接:http://www.zhihu.com/question/25912483/answer/31653639来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- nmon 命令(转)
转载:https://www.cnblogs.com/kongzhongqijing/articles/4057487.html 一.基本使用 nmon目前可支持AIX和LINUX,可到以下地址去免费 ...
- CSS如何实现自定义鼠标应用到整个网页
在CSS区把body改为*即可.但是注意Firefox不支持ani和cur文件,如果您一定想使用ani和cur的指针,可以试着将它改名为.gif文件.实际测试如果改为gif则IE也不支持了.
- TCP协议中的SO_LINGER选项
TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成.没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工 ...
- mvn 编译错误java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <init>(Z)V
Spring+struts2 +hibernate3集成,在后台测试时报的错,报错的这句话: Exception in thread "main" java.lang.NoSuch ...
- TP框架中session操作
TP中session操作 查看代码,OMG! 不应该是这样的
- Android画布更新过程OnDraw调用过程
onDraw是触发的外置接口,用户能够复写这种方法,这样当回调onDraw时,就能够绘制出用户须要的画面 这个接口方法相似onLayout的回调,利用layout(l,t,r,b)就能够触发. 而这里 ...
- PHP文件系统处理
文件系统概述 文件类型 PHP是以UNIX的文件系统为模型的,因此Windows系统中我们只能获得"file"."dir"或者"unk ...
- CentOS 6.3系统安装配置KVM虚拟机
作业环境 服务器端 操作系统:CentOS 6.3 final x86_64 IP: 133.133.10.50 Hostname:myKVM KVM:qemu-kvm-0.12.1.2-2.29 ...
- 【LeetCode】162. Find Peak Element (3 solutions)
Find Peak Element A peak element is an element that is greater than its neighbors. Given an input ar ...