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 ...
随机推荐
- Java内存溢出的详细解决方案(转http://developer.51cto.com/art/200906/129346.htm)
一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆 ...
- UNIX网络编程读书笔记:原始套接口
概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket).http://www.cnblogs.com/nufangrensheng/p/3583435.ht ...
- 算法笔记_032:最长回文串(Java)
目录 1 问题描述 2 解决方案 2.1 中心扩展法 2.2 Manacher算法 1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文 ...
- 搭建Android开发环境之旅
1.首先要下载相关的软件 1). JDK 6 以上 2). eclipse( Version 3.6.2 or higher ) 点击下载 3). SDK(android-sdk_r18-windo ...
- hunnu11546:Sum of f(x)
Problem description 令f(x)为x的全部约数之和,x的约数即能够被x整除的数.如f(24)=1+2+3+4+6+8+12+24=60),求 f(l) + f(l + 1) + ...
- UML学习(一)-工具介绍
这里用于学习UML的工具是StarUML,没有什么原因为什么要用它,或许仅仅是有人说好用和比较小. 首先介绍下这个工具,来张图. 1.菜单栏(最上面) 2.快捷工具栏(菜单栏下面) 3.工具项(Too ...
- 〖Linux〗使用ssh登录远程主机,并在本地打开远程图形界面
1. 修改/etc/ssh/sshd_config文件,设置允许TCP转发和X11转发 AllowTcpForwarding yes X11Forwarding yes 2. 登录无图形远程主机,并允 ...
- 【Linux】(2013-7-19)配置tftp与开发板传送文件
1. 安装必须软件 sudo apt-get install -y xinetd tftp-hpa 2. 修改配置文件 vi /etc/default/tftpd-hpa # /etc/default ...
- 【BIRT】报表显示不全
使用BIRT开发了一张报表,预期效果如下 但是开发完成后预览效果如下: 最后的合计竟然没有了,那么怎么处理呢 鼠标点击Layout窗口空白部分,找到布局,切换为自动布局,如下图所示:
- 31、Arrays数组排序(续)——自定义排序
自定义的类要按照一定的方式进行排序,比如一个Person类要按照年龄进行从小到大排序,比如一个Student类要按照成绩进行由高到低排序. 这里我们采用两种方式,一种是使用Comparable接口:让 ...