题目传送门:https://www.luogu.org/problemnew/show/P2831

说个题外话:NOIP2014也有一道题叫做愤怒的小鸟。

这题自测时算错了eps,导致被卡了精度,从100卡剩80

由于此题n的范围特别小,所以考虑使用状压dp。

我们用一个整数i来描述状态,i的第k个bit表示第k只鸟是否被消灭,f[i]表示在这一状态下所需鸟的最小数量。

由于不在同一直线上的三个点确定一条抛物线,所以我们可以预处理出所有的可行抛物线,并确定在该抛物线上的鸟的编号(这一步对精度要求极高)。同时考虑到两只鸟与原点存在三点共线的情况,故在抛物线方案中写入单独消灭指定一只小鸟的情况。故消灭方案之多有(n*(n-1)/2+n)种。

然后就愉快地进行转移啦~ 顺便吐槽下m没有卵用

时间复杂度为O(n^2*2^n)。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define M 18
#define eps (1e-10)
using namespace std;
int f[<<M]={};
int n;
struct pt{
int x,y; pt(){x=y=;}
pt(double xx,double yy){x=xx; y=yy;}
}a[M];
struct pao{
double a,b; pao(){a=b=;}
pao(pt A,pt B){
double x0=A.x,x1=B.x,y0=A.y,y1=B.y;
a=(y1-y0*x1/x0)/(x1*x1-x0*x1);
b=y0/x0-a*x0;
}
bool check(){
if(a>-eps) return ;
return ;
}
double get(double x){
double ans=a*x*x+b*x;
return ans;
}
};
int fly[M*M]={},use=;
bool b[<<M]={};
int Main(){
memset(f,,sizeof(f));
memset(a,,sizeof(a));
memset(fly,,sizeof(fly));
memset(b,,sizeof(b));
use=; int m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
double x,y; scanf("%lf%lf",&x,&y);
x=x*+0.3; y=y*+0.3;
a[i]=pt(x,y);
}
for(int i=;i<n;i++) fly[++use]=<<i;
for(int i=;i<=n;i++){
for(int j=;j<i;j++) if(i!=j){
if(a[i].x==a[j].x) continue;
pao A=pao(a[i],a[j]);
if(!A.check()) continue;
int x=;
for(int k=;k<n;k++){
double p=A.get(a[k+].x);
if(fabs(p-a[k+].y)<=eps)
x=x|(<<k);
}
if(!b[x])
fly[++use]=x,b[x]=;
}
}
int end=<<n; f[]=;
for(int i=;i<end;i++){
for(int j=;j<=use;j++)
f[i|fly[j]]=min(f[i|fly[j]],f[i]+);
}
printf("%d\n",f[end-]);
} int main(){
freopen("angrybirds.in","r",stdin);
freopen("angrybirds.out","w",stdout);
int cas; scanf("%d",&cas);
while(cas--) Main();
return ;
}

【NOIP2016提高组】 Day2 T3 愤怒的小鸟的更多相关文章

  1. 【NOIP2016提高组day2】愤怒的小鸟

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

  2. Noip2016 提高组 Day2 T1 组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  3. 【NOIP2016提高组day2】蚯蚓

    那么我们开三个不上升队列, 第一个记录原来的蚯蚓, 第二个记录乘以p的蚯蚓 第三个记录乘以(1-p)的蚯蚓, 在记录每条就要入队列的时间,就可以求出增加的长度 每次比较三个队列的队首,取最大的值x的切 ...

  4. NOIP2016提高组复赛C 愤怒的小鸟

    题目链接:http://uoj.ac/problem/265 题目大意: 太长了不想概括... 分析: 状压DP的模板题,把所有可能的抛物线用二进制表示,然后暴力枚举所有组合,详情见代码内注释 代码如 ...

  5. 一道搜索题【2013 noip提高组 DAY2 t3】华容道

    这篇不多说,具体的解释都在程序里 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果 ...

  6. 2012Noip提高组Day2 T3 疫情控制

    题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到 ...

  7. 【题解】NOIP2016提高组 复赛

    [题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...

  8. 18/9/16牛客网提高组Day2

    牛客网提高组Day2 T1 方差 第一眼看就知道要打暴力啊,然而并没有想到去化简式子... 可能因为昨晚没睡好,今天上午困死 导致暴力打了一个半小时,还不对... #include <algor ...

  9. 【题解】NOIP2016 提高组 简要题解

    [题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...

  10. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. 如何查看路由器的mac和计算机的mac

    如何查看路由器的mac和计算机的mac 一.查看路由器的mac 方法一: 直接看路由器的背面,如下图,即可看到MAC地址   打开命令提示符窗口,输入ipconfig,找到网关地址,如192.168. ...

  2. centos7 jenkins安装和使用

    jenkins 安装和使用 1.先安装jdK1.8 和 maven 此步骤省略 2.进入jenkisn 官网 下载https://jenkins.io/download/ Long-term Supp ...

  3. 2018.09.22 ZJOI2005午餐(贪心+01背包)

    描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不 ...

  4. 2018.09.19 atcoder Card Game for Three(组合数学)

    传送门 简单组合数学想优化想了半天啊233. 我们只需考虑翻开n张A,b张B,c张C且最后一张为A的选法数. 显然还剩下m+k−b−cm+k-b-cm+k−b−c张牌没有选. 这样的话无论前n+b+c ...

  5. CentOS7+Nginx+多个Tomcat配置

    转载自:https://blog.csdn.net/name_chc/article/details/73332272:亲测可用,加了一些注释: 配置多个tomcat转发 另附上tomcat启动慢的解 ...

  6. Shiro ini 过滤器

    http://shiro.apache.org/web.html#Web-WebINIconfiguration Filter Name Class anon org.apache.shiro.web ...

  7. day3之文件操作

    一,文件操作基本流程. # 1.打开文件,产生文件句柄 # 2.操作文件句柄 # 3.关闭文件句柄 # f1 = open('11.txt',encoding='utf-8', mode='r') # ...

  8. 编写属于自己的linux命令

    开篇: 问题和解决思路 在使用一些基础IDE时,工具经常会在我们建立特定文件时给我们一个已经有了一些特定代码的模板文件,但是在linux开发时,没有这样的IDE,怎么办?虽然代码量不是很多,但是能一次 ...

  9. 转:解决windows下eclipse中android项目关联android library project失败问题

    近日,在做一个人人的第三方小项目.打算直接使用renren 的sdk 进行开发.因为renren的sdk是以android library project 形式发布的(关于这种project的内容可以 ...

  10. LCS,LIS,LCIS学习

    for(int i = 1;i <= n;i++) { int dpmax = 0; for(int j = 1;j <= m;j++) { dp[i][j] = dp[i-1][j]; ...