NOIp2016 愤怒的小鸟 【状压dp】By cellur925
注:本文中绿鸟==猪!
这道题开始一看数据范围我们就知道是一道状压dp,因为绿鸟仅有18个,但是开始看\(m\)好像没太懂什么意思。既然确定了是状压,那就来设计状态,一般状压的状态肯定是要有二进制的串的,可能还会有其他,但是这个题好像没有别的参数需要记录,暂且设\(0\)为绿鸟没有被打,\(1\)表示绿鸟已经死亡,\(f[i]\)表示状态为\(i\)时所需要的最少的鸟数来打诶我刚才在说什么绿鸟。
考虑转移,想转移的时候大概有一个模糊的概念:一个状态或(\(or\))上另一个状态等于一个状态\(+1\)。但是又对题目中给出的抛物线产生了疑惑(怎么搞出来的),后来通过捡起放下很久的解析几何芝士想到好像这个抛物线仅有\(a,b\)两个参数且\(a<=0\),这样两点就能确定一条抛物线..之后的思路有点混乱,感觉无法把两者结合在一起,我还是太菜了==。
一种想法是\(O(T*2^n*n^2)\)的算法。我们先预处理出每根抛物线,求出每条抛物线打绿鸟对应的状态。然后转移的时候枚举每根抛物线就好。怎么处理抛物线?先两两枚举点,解出他们的抛物线,然后注意横坐标相同的两点不可解(因为差值为0,之后会整数被0除),最后再记录一下只有一个点在的抛物线。
还有是要注意下精度问题:这是自己绝对想不到的。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 400090
using namespace std;
const double eps=1e-8;
int T,n,m,tot,fake;
int lin[maxn],f[maxn],vis[100];
struct point{
double x,y;
}p[100];
void calc(int i,int j)
{
double a=(p[j].x*p[i].y-p[j].y*p[i].x)/(p[i].x*p[j].x*(p[i].x-p[j].x));
if(a>=0) return ;
double b=p[j].y/p[j].x-a*p[j].x;
tot++;
for(int k=1;k<=n;k++)
{
double qwq=p[k].x*p[k].x*a+b*p[k].x;
if(qwq-p[k].y>=eps||p[k].y-qwq>=eps) continue;
lin[tot]|=(1<<(k-1));vis[k]=1;
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
tot=0;
memset(lin,0,sizeof(lin));
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(p[i].x!=p[j].x) calc(i,j);
for(int i=1;i<=n;i++)
if(!vis[i]) lin[++tot]=(1<<(i-1));
memset(f,0x3f,sizeof(f));
f[0]=0;
fake=(1<<n)-1;
for(int i=0;i<=fake;i++)
for(int j=1;j<=tot;j++)
f[i|lin[j]]=min(f[i|lin[j]],f[i]+1);
printf("%d\n",f[fake]);
}
return 0;
}
NOIp2016 愤怒的小鸟 【状压dp】By cellur925的更多相关文章
- NOIP2016愤怒的小鸟 [状压dp]
愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...
- luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)
由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下 ...
- [noip2016]愤怒的小鸟<状压dp+暴搜>
题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...
- [Luogu P2831] 愤怒的小鸟 (状压DP)
题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. ...
- 洛谷P2831 愤怒的小鸟(状压dp)
题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一 ...
- NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化
看这范围都知道是状压吧... 题目大意就不说了嘿嘿嘿 网上流传的写法复杂度大都是O(2^n*n^2),这个复杂度虽然官方数据可以过,但是在洛谷上会TLE[百度搜出来前几个博客的代码交上去都TLE了], ...
- 【题解】P2831 愤怒的小鸟 - 状压dp
P2831愤怒的小鸟 题目描述 \(Kiana\) 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 \((0,0)\) 处,每次 \(Kiana\) 可以 ...
- P2831 愤怒的小鸟 状压dp
这个题主要是预处理比较复杂,先枚举打每只鸟用的抛物线,然后找是否有一个抛物线经过两只鸟,然后就没了. 题干: 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
随机推荐
- 九度OJ 1124:Digital Roots(数根) (递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2963 解决:1066 题目描述: The digital root of a positive integer is found by s ...
- Android笔记之manifestPlaceholders
有时根据项目需要,AndroidManifest.xml中的meta-data的值分测试和正式 为了能自动地更换meta-data值,就需要用到manifestPlaceholders 语法:mani ...
- mongodb学习之:条件操作符
在前面的章节中我们已经有用到了条件操作符,这里我们再重点介绍下.MongoDB中条件操作符有: (>) 大于 - $gt (<) 小于 - $lt (>=) 大于等于 - $gte ...
- Dispatch Sources(转)
Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继续处理自己的事情.Grand Central Dispatch正是基于这个基本行为而设 ...
- 常见的LINUX发行版安装libiconv库方法
今天编译程序,发现程序报错,如下 cannot find -liconv collect2: ld returned 1 exit status 或者 undefined reference to ` ...
- WPF-初始屏幕(SplashScreen)
本主题介绍如何将启动窗口(也称为“初始屏幕”)添加到 Windows Presentation Foundation (WPF) 应用程序. 添加现有图像作为初始屏幕 创建或查找要用于初始屏幕的图像. ...
- easyui tree 树形节点 formatter 渲染不起作用
接了个需求,需要对一个树形列表进行重新渲染,在进行渲染的过程中发现树形节点的formatter 属性无法生效.经反复测试,发现在外部环境中正常,但在项目环境中始终无效.最终发现问题出在 easyui ...
- swoole_http_server客户端测试
测试方法: http_server.php 文件内容 <?php // use Swoole\Http\Server; // $http = new Server("0.0.0.0&q ...
- codeforces 665A A. Buses Between Cities(水题)
题目链接: A. Buses Between Cities time limit per test 1 second memory limit per test 256 megabytes input ...
- Opencv— — water wave
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...