题意

分析

看n的范围只有18,考虑状压dp。

用\(f(s)\)表示过集合s中的点所需最小的抛物线数量。

然后枚举点对算抛物线,判断其他点是否在抛物线上来转移。

细节

判断能否构成抛物线只需要判断斜率关系,具体来说是

\[\frac{y_i}{x_i} > \frac{y_j-y_i}{x_j-x_i}
\]

判断三点是否在同一抛物线上,考虑方程

\[\left\{
\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.
\]

有解的条件是矩阵

\[\left[
\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君太优秀了。)

代码

  1. #include<cstdlib>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<iostream>
  6. #include<string>
  7. #include<vector>
  8. #include<list>
  9. #include<deque>
  10. #include<stack>
  11. #include<queue>
  12. #include<map>
  13. #include<set>
  14. #include<bitset>
  15. #include<algorithm>
  16. #include<complex>
  17. #define rg register
  18. #define il inline
  19. #define co const
  20. #pragma GCC optimize ("O0")
  21. using namespace std;
  22. template<class T> il T read(rg T&x)
  23. {
  24. rg T data=0;
  25. rg int w=1;
  26. rg char ch=getchar();
  27. while(!isdigit(ch))
  28. {
  29. if(ch=='-')
  30. w=-1;
  31. ch=getchar();
  32. }
  33. while(isdigit(ch))
  34. data=10*data+ch-'0',ch=getchar();
  35. return x=data*w;
  36. }
  37. typedef long long ll;
  38. const int INF=0x7fffffff;
  39. const int MAXN=20;
  40. int n,m,ms;
  41. ll x[MAXN],y[MAXN];
  42. int f[1<<MAXN|7];
  43. il void update(rg co int&x)
  44. {
  45. for(rg int i=0;i<=ms;++i)
  46. {
  47. f[i|x]=min(f[i|x],f[i]+1);
  48. // cerr<<(i|x)<<" f="<<f[i|x]<<" fi+1="<<f[i]+1<<" min="<<min(f[i|x],f[i]+1)<<endl;
  49. }
  50. }
  51. il bool in(rg co int&i,rg co int&j,rg co int&k)
  52. {
  53. rg ll det=0;
  54. det += x[i] * x[i] * x[j] * y[k];
  55. det += x[i] * y[j] * x[k] * x[k];
  56. det += y[i] * x[j] * x[j] * x[k];
  57. det -= y[i] * x[j] * x[k] * x[k];
  58. det -= x[i] * x[j] * x[j] * y[k];
  59. det -= x[i] * x[i] * y[j] * x[k];
  60. return det==0;
  61. }
  62. int main()
  63. {
  64. // freopen(".in","r",stdin);
  65. // freopen(".out","w",stdout);
  66. rg int T;
  67. read(T);
  68. while(T--)
  69. {
  70. memset(f,0x3f,sizeof f);
  71. f[0]=0; // edit 1:the init of f
  72. read(n);read(m);
  73. ms=(1<<n)-1;
  74. for(rg int i=0;i<n;++i)
  75. {
  76. rg double xi,yi;
  77. scanf("%lf %lf",&xi,&yi);
  78. x[i] = ll(100 * xi + 0.5);
  79. y[i] = ll(100 * yi + 0.5);
  80. // cerr<<i<<" x="<<x[i]<<" y="<<y[i]<<endl;
  81. }
  82. for(rg int i=0;i<n;++i)
  83. {
  84. update(1<<i);
  85. for(rg int j=0;j<n;++j)
  86. if(x[j] > x[i] && y[i] * (x[j] - x[i]) > x[i] * (y[j] - y[i]))
  87. {
  88. rg int s=(1<<i)|(1<<j);
  89. for(rg int k=0;k<n;++k)
  90. if(in(i,j,k))
  91. s|=(1<<k);
  92. // cerr<<i<<" "<<j<<" s="<<s<<endl;
  93. update(s);
  94. }
  95. }
  96. /* for(int i=0;i<1<<n;++i)
  97. cerr<<i<<" f="<<f[i]<<endl;*/
  98. printf("%d\n",f[ms]);
  99. }
  100. // fclose(stdin);
  101. // fclose(stdout);
  102. return 0;
  103. }

LG2831 愤怒的小鸟的更多相关文章

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

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

  2. 基于html5实现的愤怒的小鸟网页游戏

    之前给大家分享一款基于html5 canvas和js实现的水果忍者网页版,今天给大家分享一款基于html5实现的愤怒的小鸟网页游戏.这款游戏适用浏览器:360.FireFox.Chrome.Safar ...

  3. [luogu2831][noip d2t3]愤怒的小鸟_状压dp

    愤怒的小鸟 noip-d2t3 luogu-2831 题目大意:给你n个点,问最少需要多少条经过原点的抛物线将其覆盖. 注释:1<=点数<=18,1<=数据组数<=30.且规定 ...

  4. 洛谷P2831 愤怒的小鸟 + 篮球比赛1 2

    这三道题一起做,有一点心得吧. 愤怒的小鸟,一眼看上去是爆搜,但是实现起来有困难(我打了0分出来). 还有一种解法是状压DP. 抛物线一共只有那么多条,我们枚举抛物线(枚举两个点),这样就能够预处理出 ...

  5. Unity3D笔记 愤怒的小鸟<二> 实现Play界面

    创建Play界面.能个把各个图片组合成一个场景,场景组成后背景能够不停的滚动,当鼠标单击时显示图片手型鼠标 一.GUI Texture 1.创建背景.地面.树木.草 ,这里注意Z轴的排序,一层一层则第 ...

  6. Unity3D笔记 愤怒的小鸟<一>场景切换

    新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...

  7. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)

    Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...

  8. Unity3D游戏-愤怒的小鸟游戏源码和教程(一)

    Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...

  9. 【NOIP2016提高组】 Day2 T3 愤怒的小鸟

    题目传送门:https://www.luogu.org/problemnew/show/P2831 说个题外话:NOIP2014也有一道题叫做愤怒的小鸟. 这题自测时算错了eps,导致被卡了精度,从1 ...

随机推荐

  1. MyBatis—mybatis-config.xml配置介绍

    在定义sqlSessionFactory时需要指定MyBatis主配置文件: Xml代码   说明: 收藏代码 1.  <bean id="sqlSessionFactory" ...

  2. SQL Server2008安装图解

    1).双击set.up安装:

  3. 20145122 《Java程序设计》第5周学习总结

    教材学习内容总结 1.在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中. 2.受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕 ...

  4. 20145221 《Java程序设计》第二周学习总结

    20145221 <Java程序设计>第二周学习总结 教材学习内容总结 第二周内容已在假期完成,详见博客: <Java程序设计>第三章-基础语法 代码调试中的问题和解决过程 第 ...

  5. Java 时间格式处理

    jdk里面的日期格式处理使用SimpleDateFormat,这个类其实也是在内部调用的Calendar Calendar概念比较负责,涉及到时区和本地化 看一些简单的demo: package co ...

  6. 【max_result_window大小】 Result window is too large的问题

    方法一: 如果需要搜索分页,可以通过from size组合来进行.from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10, 如果搜索size大于10000,需要设置 ...

  7. Coursera SDN M1.1 SDN History: Central Control

    source Structure 1.讨论SDN的时间线,从1980s至今. 2.认识到SDN背后的原则和idea. 3.识别SDN起源的架构主题. NOTE Four Chapter in SDN ...

  8. 用PendingIntent传送数据丢失解决办法

    当要设置一个闹钟时,可以把数据放在Intent里,再用intent对象生成一个PendingIntent对象,然后用AlarmManager 来邦定PendingIntent对象设置闹钟,具体代码如下 ...

  9. angular项目一

    1.Angularjs第三方模块angular-route和angular-ui-router的区别.差异.不同, ui-router路由器是一个第三方模块,功能非常强大.它支持一切正常ngroute ...

  10. hdu 5696 区间的价值

    套路题 求出来以每个数为最大值/最小值时的一个区间范围, 然后枚举每个数为最大值的情况更新即可, 但是对于重复数的话需要特判一下, 假如用map记录来特判复杂度就是$O(nlogn)$, 不过题目说了 ...