Luogu2831

搜索基础

EndSaH的代码

#include<bits/stdc++.h>using namespace std;const int MAXN=20;
const double eps=1e-6;struct Point{double x,y;
}p[MAXN],surp[MAXN];struct Para{double a,b;
}par[MAXN];int T,n,m,ans;inline bool equal(double x,double y){return x-y>=-eps&&x-y<=eps;
}inline bool inc(double a,double b,double x,double y){return equal(a*x*x+b*x,y);
}inline void build(double &a,double &b,double x1,double y1,double x2,double y2){a=(x2*y1-x1*y2)/(x1*x2*(x1-x2));b=(x1*x1*y2-x2*x2*y1)/(x1*x2*(x1-x2));//矩阵乘法+逆矩阵求法
}inline void dfs(int now,int num,int rest){//DFS最重要的是分清楚情况 if(num+rest>=ans) return;if(now>n){ans=num+rest;return;}for(int i=1;i<=num;i++){if(inc(par[i].a,par[i].b,p[now].x,p[now].y)){dfs(now+1,num,rest);//此点已被覆盖 return;}}for(int i=1;i<=rest;i++){if(equal(p[i].x,p[now].x)) continue;double a,b;build(a,b,surp[i].x,surp[i].y,p[now].x,p[now].y);//组成新抛物线 if(a<0){par[num+1]=(Para){a,b};Point tmp=surp[i];for(int j=i;j<=rest-1;j++)surp[j]=surp[j+1];dfs(now+1,num+1,rest-1);for(int j=rest;j>=i+1;j--)surp[j]=surp[j-1];surp[i]=tmp;}}surp[rest+1]=p[now];//不与任何点组成新抛物线 dfs(now+1,num,rest+1);
}int main(){scanf("%d",&T);while(T--){ans=1e9;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%lf%lf",&p[i].x,&p[i].y);}dfs(1,0,0);printf("%d\n",ans);}
}

\(DP\)做法

#include<bits/stdc++.h>
using namespace std;
const int INF=1e8;
double x[20],y[20];
int para[200],dp[1<<18];
int n,m,countpara;
int Min(int x,int y){return x<y?x:y;}
void build(double &a,double &b,double x1,double y1,double x2,double y2){a=(x2*y1-x1*y2)/(x1*x2*(x1-x2));b=(x1*x1*y2-x2*x2*y1)/(x1*x2*(x1-x2));//矩阵乘法+逆矩阵求法
}
bool inc(double a,double b,double x,double y){double t=a*x*x+b*x-y;return t>=-1e-6&&t<=1e-6;//精度判断
}
void pre(){scanf("%d%d",&n,&m);for(int i=0;i<(1<<n);i++)dp[i]=INF;countpara=0;    for(int i=0;i<n;i++)scanf("%lf%lf",&x[i],&y[i]);for(int i=0;i<n;i++){para[countpara++]=(1<<i);for(int j=i+1,vis=0;j<n;j++){if(vis&(1<<j)) continue;double a,b;build(a,b,x[i],y[i],x[j],y[j]);if(a>=0) continue;para[countpara]=(1<<i);for(int k=j;k<n;k++){if(inc(a,b,x[k],y[k])){vis|=(1<<k);para[countpara]|=(1<<k);//这一条有效抛物线的状态 }}countpara++;}}
}
int ans(){dp[0]=0;for(int i=0;i<(1<<n);i++)//从0开始 for(int j=0;j<countpara;j++)//dp[para[j]]=0;dp[i|para[j]]=Min(dp[i|para[j]],dp[i]+1);//逐渐更新出最优解 return dp[(1<<n)-1];
}
int main(){int T;scanf("%d",&T);while(T--){pre();printf("%d\n",ans());}
}

转载于:https://www.cnblogs.com/lizehon/p/10630570.html

[NOIP2016]愤怒的小鸟相关推荐

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

    [NOIP2016]愤怒的小鸟(状压DP) 题目描述 输入输出格式 输入格式: 第一行包含一个正整数 T,表示游戏的关卡总数. 下面依次输入这 T个关卡的信息.每个关卡第一行包含两个非负整数 n,m, ...

  2. NOIP2016 愤怒的小鸟

    传送门 非常有趣的状压DP.(对反正我自己又没想出来) 因为猪的数目非常的少,还是能想到状压DP.之后,因为首先小鸟都是从原点发射的,所以我们只需要两只猪就可以确定一条抛物线. 既然如此,我们就可以枚 ...

  3. [NOIP2016]愤怒的小鸟 状态压缩dp

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

  4. Noip 2016 愤怒的小鸟 题解

    [NOIP2016]愤怒的小鸟 时间限制:1 s   内存限制:256 MB [题目描述] Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0, ...

  5. linux 6.4定时启动,Centos6.4 设置开机自动以某个非root用户启动脚本

    搭建LAMP环境注意事项 一:安装mysql 5.5以上版本需要使用cmake 和 bison 并且需要安装ncurses 在安装MySQL完毕之后,需要覆盖 掉 /etc/my.cnf centos ...

  6. 清北学堂2019.8.8

    Day 3 赵和旭 状态压缩dp 状态压缩是设计dp状态的一种方式. 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维状态压缩为一维来记录. 这种题目最明显的特征就 ...

  7. [NOIP2016 提高组] 愤怒的小鸟

    [NOIP2016 提高组] 愤怒的小鸟 题意: 有n只猪,给出猪的坐标(xi,yi),问最少用几个形如 y=ax^2+bx 的曲线可以保证所有猪在曲线上,满足a<0,a,b为实数 n<= ...

  8. 【NOIP2016】愤怒的小鸟

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

  9. NOIP2016 D2T3 愤怒的小鸟

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

  10. P2831 [NOIP2016 提高组] 愤怒的小鸟 状压dp

    某谷链接 题意:选最少的抛物线来覆盖所有点. 注意到a<0,所以我们可以枚举两个点来构成一条抛物线,让后记这两个点构成的抛物线为 cov[i][j]cov[i][j]cov[i][j],让后他存 ...

最新文章

  1. python比c语言好学吗-学C语言好还是Python好?
  2. ntu part-time phd 信息整理
  3. 今晚直播 | ICML 2021论文解读:基于Cox-MLP模型的二阶段共形预测
  4. switch(封装)
  5. 《SilverLight2快速入门》之基本控件DataGrid
  6. 用turtle画中国象棋棋盘
  7. 【PostgreSQL-9.6.3】表空间
  8. LaTex中编译时出现“Undefined control sequence. l.178 \newlab”问题
  9. 为什么说《让子弹飞》是古今中外的神片
  10. python 学生管理系统 文件版
  11. spring boot社区疫苗接种管理系统毕业设计源码281442
  12. 小程序中设置全屏背景图
  13. 最新免费自建APP平台哪个好?手把手教你制作APP
  14. NodeJS Addon开发
  15. idea注意事项和java数据类型
  16. snmp在win10上安装使用
  17. http 返回码 405 解决方案之一
  18. iOS开发小技巧汇总
  19. 自动化测试框架-数据驱动(1)
  20. 计算机休眠开启密码设定,怎么把电脑设定待机密码

热门文章

  1. 拓端tecdat|matlab使用Copula仿真优化市场风险数据VaR分析
  2. 深圳大学计算机与软件学院李志,李志彬
  3. oracle 变长数组,oracle:变长数组varray,嵌套表,集合
  4. 2020 【第十一届蓝桥杯省赛】 C/C++ B组 (第二场)
  5. jQuery学习笔记01
  6. keras 多分类一些函数参数设置
  7. 超大规模文本数据清洗、查找、匹配神器之python模块flashtext学习使用
  8. Python绘制简单漂亮好玩的散点图
  9. html5 苹果手机上传word文件_DocumentsbyReaddle文件管理器,让你的苹果手机 更顺畅...
  10. 区块链 solana TPS吞吐率