LG2831 愤怒的小鸟
题意
分析
看n的范围只有18,考虑状压dp。
用\(f(s)\)表示过集合s中的点所需最小的抛物线数量。
然后枚举点对算抛物线,判断其他点是否在抛物线上来转移。
细节
判断能否构成抛物线只需要判断斜率关系,具体来说是
\]
判断三点是否在同一抛物线上,考虑方程
\begin{array}{}
a x_i^2 + bx_i & = & y_i \\
a x_j^2 + bx_j & = & y_j \\
a x_k^2 + bx_k & = & y_k \\
\end{array}
\right.
\]
有解的条件是矩阵
\begin{matrix}
x_i^2 & x_i & y_i \\
x_j^2 & x_j & y_j \\
x_k^2 & x_k & y_k
\end{matrix}
\right]
\]
线性相关,只需行列式为0。(B君太优秀了。)
代码
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#define rg register
#define il inline
#define co const
#pragma GCC optimize ("O0")
using namespace std;
template<class T> il T read(rg T&x)
{
rg T data=0;
rg int w=1;
rg char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff;
const int MAXN=20;
int n,m,ms;
ll x[MAXN],y[MAXN];
int f[1<<MAXN|7];
il void update(rg co int&x)
{
for(rg int i=0;i<=ms;++i)
{
f[i|x]=min(f[i|x],f[i]+1);
// cerr<<(i|x)<<" f="<<f[i|x]<<" fi+1="<<f[i]+1<<" min="<<min(f[i|x],f[i]+1)<<endl;
}
}
il bool in(rg co int&i,rg co int&j,rg co int&k)
{
rg ll det=0;
det += x[i] * x[i] * x[j] * y[k];
det += x[i] * y[j] * x[k] * x[k];
det += y[i] * x[j] * x[j] * x[k];
det -= y[i] * x[j] * x[k] * x[k];
det -= x[i] * x[j] * x[j] * y[k];
det -= x[i] * x[i] * y[j] * x[k];
return det==0;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
rg int T;
read(T);
while(T--)
{
memset(f,0x3f,sizeof f);
f[0]=0; // edit 1:the init of f
read(n);read(m);
ms=(1<<n)-1;
for(rg int i=0;i<n;++i)
{
rg double xi,yi;
scanf("%lf %lf",&xi,&yi);
x[i] = ll(100 * xi + 0.5);
y[i] = ll(100 * yi + 0.5);
// cerr<<i<<" x="<<x[i]<<" y="<<y[i]<<endl;
}
for(rg int i=0;i<n;++i)
{
update(1<<i);
for(rg int j=0;j<n;++j)
if(x[j] > x[i] && y[i] * (x[j] - x[i]) > x[i] * (y[j] - y[i]))
{
rg int s=(1<<i)|(1<<j);
for(rg int k=0;k<n;++k)
if(in(i,j,k))
s|=(1<<k);
// cerr<<i<<" "<<j<<" s="<<s<<endl;
update(s);
}
}
/* for(int i=0;i<1<<n;++i)
cerr<<i<<" f="<<f[i]<<endl;*/
printf("%d\n",f[ms]);
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
LG2831 愤怒的小鸟的更多相关文章
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 基于html5实现的愤怒的小鸟网页游戏
之前给大家分享一款基于html5 canvas和js实现的水果忍者网页版,今天给大家分享一款基于html5实现的愤怒的小鸟网页游戏.这款游戏适用浏览器:360.FireFox.Chrome.Safar ...
- [luogu2831][noip d2t3]愤怒的小鸟_状压dp
愤怒的小鸟 noip-d2t3 luogu-2831 题目大意:给你n个点,问最少需要多少条经过原点的抛物线将其覆盖. 注释:1<=点数<=18,1<=数据组数<=30.且规定 ...
- 洛谷P2831 愤怒的小鸟 + 篮球比赛1 2
这三道题一起做,有一点心得吧. 愤怒的小鸟,一眼看上去是爆搜,但是实现起来有困难(我打了0分出来). 还有一种解法是状压DP. 抛物线一共只有那么多条,我们枚举抛物线(枚举两个点),这样就能够预处理出 ...
- Unity3D笔记 愤怒的小鸟<二> 实现Play界面
创建Play界面.能个把各个图片组合成一个场景,场景组成后背景能够不停的滚动,当鼠标单击时显示图片手型鼠标 一.GUI Texture 1.创建背景.地面.树木.草 ,这里注意Z轴的排序,一层一层则第 ...
- Unity3D笔记 愤怒的小鸟<一>场景切换
新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...
- 【NOIP2016提高组】 Day2 T3 愤怒的小鸟
题目传送门:https://www.luogu.org/problemnew/show/P2831 说个题外话:NOIP2014也有一道题叫做愤怒的小鸟. 这题自测时算错了eps,导致被卡了精度,从1 ...
随机推荐
- Python: 矩阵与线性代数运算
需要执行矩阵和线性代数运算,比如矩阵乘法.寻找行列式.求解线性方程组等等. 矩阵类似于3.9 小节中数组对象,但是遵循线性代数的计算规则.下面的一个例子展示了矩阵的一些基本特性: >>&g ...
- json反序列化快捷实体类
有时候我们反序列化一个json串只为了提取里面的数据,而且json串的层级结构可能会比较复杂,定义对应的实体类会多而杂,有时还不一定能达到想要的效果. 则可以关注下以下两个类: java : ...
- 20145325张梓靖 《Java程序设计》第16周课程总结
20145325张梓靖 <Java程序设计>第16周课程总结 实验报告链接汇总 实验一 "Java开发环境的熟悉" 实验二 "Java面向对象程序设计&quo ...
- CSS3动画库——animate.css
初见animate.css的时候,感觉很棒,基本上很多常用的CSS3动画效果都帮我们写好了,所以想要哪一种效果直接就可以拿过来用,甚是方便: 效果展示官网:http://daneden.github. ...
- AOP AspectJ注解
概念: 切面(aspect):用来切插业务方法的类.连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析.通知(advice):在切面类中 ...
- [BZOJ1901]Dynamic Rankings
Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1 ],a[i+2]……a[j]中第k小的数 ...
- BZOJ 2763 飞行路线(分层图最短路)题解
题意:中文题意不解释... 思路:分层图最短路,我们再开一维用来表示当前用了多少次免费次数,dis[i][j]就表示到达i点用了j次免费的最短路,有点DP的感觉. 当个模板用 参考:分层图最短路 代码 ...
- shell脚本监控Linux系统性能指标
2016-11-04 22:41 原作者不详 分类: Linux(7) 在服务器运维过程中,经常需要对服务器的各种资源进行监控, 例如:CPU的负载监控,磁盘的使用率监控,进程数目监控等等,以在系统出 ...
- Mybatis之SSM配置
applicationContext-dao.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...
- linux下smb
smbclient用法 1,列出某个IP地址所提供的共享文件夹smbclient -L 198.168.0.1 -U username%password 2,像FTP客户端一样使用smbclients ...