题目传送门

注:本文中绿鸟==猪!

这道题开始一看数据范围我们就知道是一道状压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的更多相关文章

  1. NOIP2016愤怒的小鸟 [状压dp]

    愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...

  2. luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)

    由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下 ...

  3. [noip2016]愤怒的小鸟<状压dp+暴搜>

    题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...

  4. [Luogu P2831] 愤怒的小鸟 (状压DP)

    题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. ...

  5. 洛谷P2831 愤怒的小鸟(状压dp)

    题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一 ...

  6. NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化

    看这范围都知道是状压吧... 题目大意就不说了嘿嘿嘿 网上流传的写法复杂度大都是O(2^n*n^2),这个复杂度虽然官方数据可以过,但是在洛谷上会TLE[百度搜出来前几个博客的代码交上去都TLE了], ...

  7. 【题解】P2831 愤怒的小鸟 - 状压dp

    P2831愤怒的小鸟 题目描述 \(Kiana\) 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 \((0,0)\) 处,每次 \(Kiana\) 可以 ...

  8. P2831 愤怒的小鸟 状压dp

    这个题主要是预处理比较复杂,先枚举打每只鸟用的抛物线,然后找是否有一个抛物线经过两只鸟,然后就没了. 题干: 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上 ...

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

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

随机推荐

  1. spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】

    最近做了一个spring boot 整合 quartz  实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要 ...

  2. jquery特效(2)—选项卡

    最近公司有个页面正好用到了选项卡,我就写了一下,感觉还不错,都挺简单的. 下面来看动态效果: 一.主体程序 <!DOCTYPE html> <html> <head> ...

  3. 人生苦短之Python类的一二三

    在Python中,类也是以class开头定义的.我们定义一个动物类,它有名字和年龄,在java变量有实例变量和局部变量,方法内的变量是局部变量,类里面的变量是实例变量.那么在Python中的类及其属性 ...

  4. iptables 端口映射

    一.环境和要实现功能 PC1的网络设置如下: eth0       192.168.0.29 内网 eth1 219.239.11.22 外网 PC2的网络设置则为:192.168.0.21 内网 我 ...

  5. testing

    doctest_test.py def square(x): ''' 这里需要空格 >>> square(2) 4 啦啦 >>> square(3) 9 上不一行能 ...

  6. codevs 2456栅栏

    传送门 2456 栅栏 2006年省队选拔赛四川  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Maste   题目描述 Description 农夫约翰打算建立一个栅 ...

  7. UNP总结 Chapter 11 名字与地址转换

    本章讲述在名字和数值地址间进行转换的函数:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务器名字和端口 ...

  8. 四、Chrome开发者工具详解(4)-Profiles面板

    摘自: http://www.cnblogs.com/charliechu/p/6003713.html

  9. Rikka with Sequence

    题意: 给一长度为n的序列,维护三个操作:区间开根,区间加,区间求和. 解法: 注意到本题关键在于区间开根: 对于一个数字,只要进行$O(loglogT)$次开根即会变为1. 考虑线段树,对于线段数上 ...

  10. RetHad6.7离线通过.rpm安装

    必须有RetHad6.7系统的.ios镜像文件,我们需要的.rpm都在镜像的Packages里面,针对不能联网的,并且也适用与CentOS系统 1. 查看版本号 参考我的博客 https://www. ...