题目链接

题目链接

题解

数据范围显然状压/爆搜。

考虑\(f[S]\)表示二进制下已打了的猪的集合。

可以枚举\(S\)的子集\(S_1\),判定\(S\)中\(S_1\)的补集\(S_2\)是否合法。

判定可以通过待定系数法做到\(O(n)\)判定。若补集合法,则\(f[S]=\min\{f[S_1]+1 \}\)。

复杂度是\(O(Tn3^n)\)。这样能\(70\)分。

考虑如何优化。因为\(n\)很小,所以可以\(O(n^3)\)预处理出\(g_{i,j}\)表示经过\(i,j\)两点的二次函数可达的点集。那么转移的时候枚举二次函数(通过枚举点\(i\)和点\(j\)),转移方程\(f[S|g_{i,j}]=\min\{f[S]+1\}\)。

那么复杂度降到\(O(Tn^22^n)\)。已经可以通过本题了。

唐神的\(blog\)里面还有个优化。

一个结论:每个状态\(S\)用于转移的二次函数,一定经过该状态中不包含的第一个点\(x\)。因为最后的目标是选所有的点,这个点不选,在最后的最优方案中也一定会被其他点选到,而前面已经处理出了\(g_{i,j}\),可达点集已经都处理出来了。所以只用这个点\(x\)转移是合法的。

如果预处理出来每个状态\(S\)所对应的\(x\)的话复杂度就是\(O(Tn2^n)\)的。如果不处理的话会慢一点但也不会太多。

#include <bits/stdc++.h>
using namespace std; const int N = 20;
const int inf = 0x3f3f3f3f;
const double eps = 1e-10;
int n, m, f[(1 << 18) + 5], T, g[N][N];
double a[N], b[N]; int main() {
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
for(int i = 0; i < n; ++i) scanf("%lf%lf", &a[i], &b[i]);
memset(g, 0, sizeof(g)); memset(f, 0x3f, sizeof(f)); f[0] = 0;
for(int i = 0; i < n; ++i) {
for(int j = i + 1; j < n; ++j) {
if(a[i] == a[j]) continue;
double A = (b[i] - b[j] * a[i] / a[j]) / (a[i] * a[i] - a[i] * a[j]);
double B = (b[i] - A * a[i] * a[i]) / a[i];
if(A >= 0) continue;
for(int k = 0; k < n; ++k)
if(fabs(b[k] - (A * a[k] * a[k] + B * a[k])) <= eps) g[i][j] |= 1 << k;
}
}
for(int S = 0; S < 1 << n; ++S) {
for(int i = 0; i < n; ++i) {
f[S | (1 << i)] = min(f[S | (1 << i)], f[S] + 1);
if(!(S & (1 << i))) {
for(int j = i + 1; j < n; ++j)
f[S | g[i][j]] = min(f[S | g[i][j]], f[S] + 1);
break;
}
}
}
printf("%d\n", f[(1 << n) - 1]);
}
}

LGOJP2831 愤怒的小鸟的更多相关文章

  1. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  2. 基于html5实现的愤怒的小鸟网页游戏

    之前给大家分享一款基于html5 canvas和js实现的水果忍者网页版,今天给大家分享一款基于html5实现的愤怒的小鸟网页游戏.这款游戏适用浏览器:360.FireFox.Chrome.Safar ...

  3. [luogu2831][noip d2t3]愤怒的小鸟_状压dp

    愤怒的小鸟 noip-d2t3 luogu-2831 题目大意:给你n个点,问最少需要多少条经过原点的抛物线将其覆盖. 注释:1<=点数<=18,1<=数据组数<=30.且规定 ...

  4. 洛谷P2831 愤怒的小鸟 + 篮球比赛1 2

    这三道题一起做,有一点心得吧. 愤怒的小鸟,一眼看上去是爆搜,但是实现起来有困难(我打了0分出来). 还有一种解法是状压DP. 抛物线一共只有那么多条,我们枚举抛物线(枚举两个点),这样就能够预处理出 ...

  5. Unity3D笔记 愤怒的小鸟<二> 实现Play界面

    创建Play界面.能个把各个图片组合成一个场景,场景组成后背景能够不停的滚动,当鼠标单击时显示图片手型鼠标 一.GUI Texture 1.创建背景.地面.树木.草 ,这里注意Z轴的排序,一层一层则第 ...

  6. Unity3D笔记 愤怒的小鸟<一>场景切换

    新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...

  7. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)

    Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...

  8. Unity3D游戏-愤怒的小鸟游戏源码和教程(一)

    Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...

  9. 【NOIP2016提高组】 Day2 T3 愤怒的小鸟

    题目传送门:https://www.luogu.org/problemnew/show/P2831 说个题外话:NOIP2014也有一道题叫做愤怒的小鸟. 这题自测时算错了eps,导致被卡了精度,从1 ...

随机推荐

  1. python:单元测试框架pytest的一个简单例子

    之前一般做自动化测试用的是unitest框架,发现pytest同样不错,写一个例子感受一下 test_sample.py import cx_Oracle import config from sen ...

  2. Python虚拟环境Virtualen简单使用

    安装pip 使用脚本安装和升级pip 要安装或升级pip,需要下载 get-pip.py. 地址:https://bootstrap.pypa.io/get-pip.py 然后运行以下命令 (需要管理 ...

  3. Altera PLL Locked 失锁的原因

    Altera PLL 有时可能会出现失锁的情况,查找了官网资料,有总结到有几个情况下会出现失锁. 官网中的网页如下,是英文的: https://www.altera.com.cn/support/su ...

  4. WCF之Windows宿主

    WCF之Windows宿主(可安装成服务自动并启动) WCF之Windows宿主(可安装成服务自动并启动) 创建解决方案WCFServiceDemo 创建WCF服务库(类库或WCF服务库)WCFSer ...

  5. 【转】Fuel 9.0安装Openstack网络验证失败解决

    原文链接:https://blog.csdn.net/wiborgite/article/details/52983575 故障现象: 网络验证失败,报错信息如下: Repo availability ...

  6. win10 双网卡设置内网和外网同时访问

    当前环境是内网使用固定ip 用有线连接 外网自动获取使用wifi模块连接wifi cmd窗口下运行route print -4 打印路由信息 首先删除 所有0.0.0.0的路由,也就是默认设置 rou ...

  7. 关于su下bash:xxx :command not found

    今天在新建组的时候出了问题: $ su Password: # groupadd prj bash: groupadd :command not found 我就纳闷,明明是在su权限下,怎么还不能使 ...

  8. redis示例

    1. 引入redis相关包 <!-- redis 相关包--> <dependency> <groupId>org.springframework.data< ...

  9. [转帖]首颗国产DRAM芯片的技术与专利,合肥长鑫存储的全面深度剖析

    首颗国产DRAM芯片的技术与专利,合肥长鑫存储的全面深度剖析 https://mp.weixin.qq.com/s/g_gnr804q8ix4b9d81CZ1Q 2019.11 存储芯片已经成为全球珍 ...

  10. laravel中一些非常常用的php artisan命令

    php artisan 命令在开发laravel项目中非常常用,下面是一些总结 composer config -g repo.packagist composer https://mirrors.a ...