P2831 愤怒的小鸟

抛物线过原点,只要再找两个就能确定抛物线;

处理出两两之间的抛物线能过哪些点,状态压缩;

但是直接枚举每一条抛物线常数太大会T,所以我们需要预处理一个low_bit表示当前状态下第一个没选的,即是二进制下第一个不是1的位置;

因为我们早晚都要把它变成1,所以先处理他就可以达到要求;

注意精度问题;

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef double dd;
const int maxn=;
const dd acc=1e-; int T,n,m;
dd x[maxn],y[maxn]; int low_bit[<<]; int line[maxn][maxn]; void check(dd&a,dd &b,dd x1,dd y1,dd x2,dd y2)
{
a=(y1*x2-y2*x1)/(x1*(x1*x2-x2*x2));
b=(y2-a*x2*x2)/x2;
} int f[<<]; int main()
{
for(int i=;i<<<;i++)
{
int j=;
for(;j<=&& i&(<<(j-));j++);
low_bit[i]=j;
//printf("!!%d\n",low_bit[i]);
} scanf("%d",&T); while(T--)
{
memset(f,0x3f,sizeof(f));
memset(line,,sizeof(line));
f[]=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
} for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(fabs(x[i]-x[j])<acc) continue;
dd a,b;
check(a,b,x[i],y[i],x[j],y[j]);
//printf("!!\n");
//printf("%lf %lf\n",a,b);
if(a>-acc) continue;
for(int k=;k<=n;k++)
{
if(fabs(a*x[k]*x[k]+b*x[k]-y[k])<acc)
{
line[i][j]|=<<(k-);
//printf("!!%d\n",line[i][j]);
}
}
}
} for(int i=;i<(<<n);i++)
{
int j=low_bit[i];
//printf("!?%d\n",j);
f[i|(<<(j-))]=min(f[i]+,f[i|(<<(j-))]);
//printf("??%d\n",f[i|(1<<(j-1))]);
for(int k=;k<=n;k++)
{
f[i|line[j][k]]=min(f[i]+,f[i|line[j][k]]);
}
} printf("%d\n",f[(<<n)-]);
} return ;
}

P2831 愤怒的小鸟——状压的更多相关文章

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

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

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

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

  3. Luogu P2831 愤怒的小鸟(状压+记忆化搜索)

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

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

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

  5. P2831 愤怒的小鸟 状压dp

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

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

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

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

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

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

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

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

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

随机推荐

  1. 正整数序列 Help the needed for Dexter ,UVa 11384

    题目描述 Description 给定正整数n,你的任务是用最少的操作次数把序列1, 2, …, n中的所有数都变成0.每次操作可从序列中选择一个或多个整数,同时减去一个相同的正整数.比如,1,2,3 ...

  2. 路由基础(Routing)

    查看本机路由表: [root@controller02 ~]# cat /etc/iproute2/rt_tables # # reserved values # 255     local 254  ...

  3. netcore使用EFcore(第一个实例)

    说明:搭建netcore 使用efcore入门教程,跟着这个教程,傻瓜都可以成功!O(∩_∩)O哈哈~,咱们开始吧: 首先介绍下环境: vs2017, netcore2.2, EntityFramew ...

  4. Python爬虫之BeautifulSoap的用法

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  5. IO中断

    >>>io的中断编程 以上例程会有什么问题呢? 注意:CPU内部寄存器

  6. js中0.1+0.2 与0.3的对比

    Math.abs(0.1+0.2-0.3)<=Number.EPSILON

  7. UI5-技术篇-Navigation And Routing

    主要记录下Router设置过程中出现的几个问题 1.View 首页设置 controlId 2.Manifest设置 2.1设置启动页 2.2设置默认配置 2.3设置Targets 首页设置 子页设置 ...

  8. Python 获取环境变量的几种方式

    第一种 import os os.environ.get('key_name') 第二种 import os os.getenv('key_name') 第三种 import os os.getenv ...

  9. AD19新功能之跟随走线

    跟随走线 AD19新增跟随走线,比如需要按照特定的轨迹进行走线,比如要绕着一个圆进行走线,或者靠着边框走线,普通模式下的效果如下图所示,线会跟着指针跑: 在走线模式下,按住 shift + f ,然后 ...

  10. 网上的JAVA语言的某个测试框架

    https://github.com/wenchengyao/testLJTT.git 使用maven打包,mvn clean install 在运行的时候,java -jar testLJTT.ja ...