【noip2016d2t3】状压DP+巧妙优化
题意可以简单这样考虑
给出n^2个集合(每个集合的元素不超过n),包含某个元素的集合至少有n个,选出最少的集合,使这些集合的并包含n个元素
n最大只有18
可以考虑状压n个元素,然后枚举n^2个集合
这样的复杂度是2^n*n^2
但是我们可以这样考虑,因为最终的集合一定包含所有的元素,所以不妨预处理出每个状态中最靠左的0的位置,
然后每次只需要考虑包含这个元素的n个集合(因为你最终一定要包含这个元素,所以不如就先包含它)
这样复杂度就降低成2^n*n
注意精度,以及两个点不一定能构成抛物线
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std; struct Pair
{
double x, y;
Pair() {}
Pair(double _x, double _y):x(_x), y(_y) {}
}p[];
int Map[][];
vector<int> State;
int f[(<<())], Hash[(<<())];
Pair Get(Pair A, Pair B)
{
if(A.x == B.x && A.y == B.y) B.x = A.x+;
double y = (B.y*A.x - B.x*A.y)/(B.x*B.x*A.x - A.x*A.x*B.x);
double x = (A.y - y*A.x*A.x)/A.x;
return Pair(x, y);
}
const double eps = 1e-;
bool On(Pair A, Pair X)
{
return abs(X.y - A.x*X.x - A.y*X.x*X.x) < eps;
}
int n, m, T;
int And(int X, int i)
{
for(int j = ; j <= n; j++)
if(Map[i][j]) X = X|(<<(j-));
return X;
}
void debug(int X)
{
for(int i = ; i < n; i++) if(X&(<<i)) cout<<; else cout<<;
cout<<endl;
}
int main()
{
for(int i = ; i <= (<<)-; i++)
{
for(int j = ; j <= ; j++)
if((i&(<<j)) == ) { Hash[i] = j+; break; }
}
cin>>T;
while(T--)
{
cin>>n>>m;
memset(Map, , sizeof(Map));
memset(f, , sizeof(f));
State.clear(); State.push_back();
for(int i = ; i <= n; i++) cin>>p[i].x>>p[i].y;
int tot = ;
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
{
Pair temp = Get(p[i], p[j]);
if(temp.y >= ) continue;
for(int k = ; k <= n; k++)
if(On(temp, p[k]))
Map[(i-)*n+j][k] = ;
}
int k = , M = (<<n)-;
while(f[M] == )
{
int sz = State.size();
for(int s = k; s < sz; s++)
{
for(int i = ; i <= n; i++)
{
int s2 = And(State[s], (Hash[State[s]]-)*n+i);
if(f[s2] == && s2 != )
{
f[s2] = f[State[s]] + ;
State.push_back(s2);
}else
f[s2] = min(f[s2], f[State[s]] + );
}
}
k = sz;
}
cout<<f[(<<n)-]<<endl;
}
}
【noip2016d2t3】状压DP+巧妙优化的更多相关文章
- 【bzoj1097】[POI2007]旅游景点atr 状压dp+堆优化Dijkstra
题目描述 FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD不希望在刚吃过一顿大餐之后立刻去下一个 ...
- NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
我只能说,珍爱生命,远离卡常数的题...感谢陈老师和蔡神,没有他们,,,我调一个星期都弄不出来,,,, 哈罗哈的大披萨 [淡蓝] 时间限制(普通/Java) : 1000 MS/ 3000 MS ...
- Codeforces 917C - Pollywog(状压 dp+矩阵优化)
UPD 2021.4.9:修了个 typo,为啥写题解老出现 typo 啊( Codeforces 题目传送门 & 洛谷题目传送门 这是一道 *2900 的 D1C,不过还是被我想出来了 u1 ...
- BZOJ4000 [TJOI2015]棋盘 【状压dp + 矩阵优化】
题目链接 BZOJ4000 题解 注意题目中的编号均从\(0\)开始= = \(m\)特别小,考虑状压 设\(f[i][s]\)为第\(i\)行为\(s\)的方案数 每个棋子能攻击的只有本行,上一行, ...
- POJ1038 Bugs Integrated, Inc 状压DP+优化
(1) 最简单的4^10*N的枚举(理论上20%) (2) 优化优化200^3*N的枚举(理论上至少50%) (3) Dfs优化状压dp O(我不知道,反正过不了,需要再优化)(理论上80%) (4) ...
- bzoj2004 矩阵快速幂优化状压dp
https://www.lydsy.com/JudgeOnline/problem.php?id=2004 以前只会状压dp和矩阵快速幂dp,没想到一道题还能组合起来一起用,算法竞赛真是奥妙重重 小Z ...
- T2988 删除数字【状压Dp+前缀和优化】
Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- POJ1185 状压dp(二进制//三进制)解法
很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...
随机推荐
- tomcat.apache startup.bat闪退两种解决方法
tomcat bin文件夹中的startup.bat闪退原因及解决方法两种 方法一:在启动tomcat时闪退,重新检查java的jre运行环境.如果环境变量忘记配置一定会导致了tomcat的闪退. 追 ...
- A的B次幂
Description 给出两个正整数A和B 请输出A的B次幂 结果可能很大,请对1000000007求模 Input A和B,两个整数均不大于10^18 Output A的B次幂对100000000 ...
- 在 publicId 和 systemId 之间需要有空格。
spring applicationContext_datasource.xml中约束错误 org.springframework.beans.factory.xml.XmlBeanDefiniti ...
- C#进阶学习笔记(个人整理)
学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...
- 在haoodp-2.7.3 HA的基础上安装Hbase HA
前提安装好hadoop基于QJM的高可用 node1 HMaster node2 HMaster.HRegionServer node3 HRegionServer node4 HRegionServ ...
- 安装破解IDEA(个人使用)
安装的过程,许多的教程都会有,我在这里附上一两个链接吧:https://blog.csdn.net/newabcc/article/details/80601933 他这里也有破解过程,但是比较麻烦, ...
- python核心编程2 第五章 练习
5-2 运算符(a) 写一个函数,计算并返回两个数的乘积(b) 写一段代码调用这个函数,并显示它的结果 def product(x, y): return x * y if __name__ == ' ...
- Centos7-Mysql-5.6.41一主两从的搭建
01.准备工作 首先的前提条件你必须安装了mysql,而且知道你安装mysql配置文件的位置,接下来的事情就好办了. 我的搭建环境: 服务器1: 10.233.17.20 mysql-master(主 ...
- python错误处理之try...except...finally...错误处理机制。
今天学习了python的错误处理. 在程序处理的过程中,经常会出现错误,一旦出错就会非常麻烦.所以有的高级语言通常都内置了一套 try...exept...finaly...的错误处理机制,pyth ...
- hive连接MySQL报错
错误如下: [root@awen01 /usr/local/apache-hive-1.2.1-bin]#./bin/hive Logging initialized using configurat ...