题意可以简单这样考虑

给出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+巧妙优化的更多相关文章

  1. 【bzoj1097】[POI2007]旅游景点atr 状压dp+堆优化Dijkstra

    题目描述 FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD不希望在刚吃过一顿大餐之后立刻去下一个 ...

  2. NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]

    我只能说,珍爱生命,远离卡常数的题...感谢陈老师和蔡神,没有他们,,,我调一个星期都弄不出来,,,, 哈罗哈的大披萨 [淡蓝] 时间限制(普通/Java) : 1000 MS/ 3000 MS   ...

  3. Codeforces 917C - Pollywog(状压 dp+矩阵优化)

    UPD 2021.4.9:修了个 typo,为啥写题解老出现 typo 啊( Codeforces 题目传送门 & 洛谷题目传送门 这是一道 *2900 的 D1C,不过还是被我想出来了 u1 ...

  4. BZOJ4000 [TJOI2015]棋盘 【状压dp + 矩阵优化】

    题目链接 BZOJ4000 题解 注意题目中的编号均从\(0\)开始= = \(m\)特别小,考虑状压 设\(f[i][s]\)为第\(i\)行为\(s\)的方案数 每个棋子能攻击的只有本行,上一行, ...

  5. POJ1038 Bugs Integrated, Inc 状压DP+优化

    (1) 最简单的4^10*N的枚举(理论上20%) (2) 优化优化200^3*N的枚举(理论上至少50%) (3) Dfs优化状压dp O(我不知道,反正过不了,需要再优化)(理论上80%) (4) ...

  6. bzoj2004 矩阵快速幂优化状压dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=2004 以前只会状压dp和矩阵快速幂dp,没想到一道题还能组合起来一起用,算法竞赛真是奥妙重重 小Z ...

  7. T2988 删除数字【状压Dp+前缀和优化】

    Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...

  8. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  9. POJ1185 状压dp(二进制//三进制)解法

    很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...

随机推荐

  1. React dangerouslySetInnerHTML - 将HTML字符串解析为html样式显示

    <div dangerouslySetInnerHTML={{ __html: curriculumDesc }}></div>

  2. 在线代码编辑器 Codemirror 的轻量级 React 组件

    代码编辑器 CodeMirror 的轻量级 React 组件 demo @uiw-react.github.io/react-codemirror/ 特性:

  3. Ajax跨域请求以及乱码解决

    Ajax跨域请求2种解决方法 1 ) 什么叫跨域请求,协议,域名,端口号,其中一样不同都称跨域; 第一种:使用script标签发送请求; //创建一个script标签; var v_element=d ...

  4. mysql基础,索引

  5. 在网页标题上加个logo

    只需在title标签上加个link标签即可 <link rel="icon" href="images/icon.png" > <title& ...

  6. pip更改国内源

    国内源: 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(dou ...

  7. 第1章 HTML5 概述

    第 1 章  HTML5 概述 学习要点: 1.HTML5 的历史 2.HTML5 的功能 3.HTML5 的特点 4.课程学习问题 HTML5 是继 HTML4.01 和 XHTML1.0 之后的超 ...

  8. thinkPHP5.0 save和saveAll,新增和更新的问题

    今天遇到一个问题,在模型中使用save保存数据之后,使用saveAll继续新增数据,结果报 缺少更新条件,网上搜了下发现一篇文章https://www.jianshu.com/p/1848f61de6 ...

  9. 利用python进行坐标提取以及筛选(文件操作的小应用)

    由于目前暂时还未学习到python关于数据处理的模块方面的知识,且刚好最近朋友发来一份坐标数据文件(txt格式),让我帮他对其进行筛选, 因此利用了最近刚学过的python文件处理操作以及以前所学的基 ...

  10. POJ 2441 状压DP

    Arrange the Bulls Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 5289   Accepted: 2033 ...