[NOIP2016]愤怒的小鸟
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]愤怒的小鸟相关推荐
- [NOIP2016]愤怒的小鸟(状压DP)
[NOIP2016]愤怒的小鸟(状压DP) 题目描述 输入输出格式 输入格式: 第一行包含一个正整数 T,表示游戏的关卡总数. 下面依次输入这 T个关卡的信息.每个关卡第一行包含两个非负整数 n,m, ...
- NOIP2016 愤怒的小鸟
传送门 非常有趣的状压DP.(对反正我自己又没想出来) 因为猪的数目非常的少,还是能想到状压DP.之后,因为首先小鸟都是从原点发射的,所以我们只需要两只猪就可以确定一条抛物线. 既然如此,我们就可以枚 ...
- [NOIP2016]愤怒的小鸟 状态压缩dp
题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形 ...
- Noip 2016 愤怒的小鸟 题解
[NOIP2016]愤怒的小鸟 时间限制:1 s 内存限制:256 MB [题目描述] Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0, ...
- linux 6.4定时启动,Centos6.4 设置开机自动以某个非root用户启动脚本
搭建LAMP环境注意事项 一:安装mysql 5.5以上版本需要使用cmake 和 bison 并且需要安装ncurses 在安装MySQL完毕之后,需要覆盖 掉 /etc/my.cnf centos ...
- 清北学堂2019.8.8
Day 3 赵和旭 状态压缩dp 状态压缩是设计dp状态的一种方式. 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维状态压缩为一维来记录. 这种题目最明显的特征就 ...
- [NOIP2016 提高组] 愤怒的小鸟
[NOIP2016 提高组] 愤怒的小鸟 题意: 有n只猪,给出猪的坐标(xi,yi),问最少用几个形如 y=ax^2+bx 的曲线可以保证所有猪在曲线上,满足a<0,a,b为实数 n<= ...
- 【NOIP2016】愤怒的小鸟
Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟 ...
- NOIP2016 D2T3 愤怒的小鸟
Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如的曲线, ...
- P2831 [NOIP2016 提高组] 愤怒的小鸟 状压dp
某谷链接 题意:选最少的抛物线来覆盖所有点. 注意到a<0,所以我们可以枚举两个点来构成一条抛物线,让后记这两个点构成的抛物线为 cov[i][j]cov[i][j]cov[i][j],让后他存 ...
最新文章
- python比c语言好学吗-学C语言好还是Python好?
- ntu part-time phd 信息整理
- 今晚直播 | ICML 2021论文解读:基于Cox-MLP模型的二阶段共形预测
- switch(封装)
- 《SilverLight2快速入门》之基本控件DataGrid
- 用turtle画中国象棋棋盘
- 【PostgreSQL-9.6.3】表空间
- LaTex中编译时出现“Undefined control sequence. l.178 \newlab”问题
- 为什么说《让子弹飞》是古今中外的神片
- python 学生管理系统 文件版
- spring boot社区疫苗接种管理系统毕业设计源码281442
- 小程序中设置全屏背景图
- 最新免费自建APP平台哪个好?手把手教你制作APP
- NodeJS Addon开发
- idea注意事项和java数据类型
- snmp在win10上安装使用
- http 返回码 405 解决方案之一
- iOS开发小技巧汇总
- 自动化测试框架-数据驱动(1)
- 计算机休眠开启密码设定,怎么把电脑设定待机密码
热门文章
- 拓端tecdat|matlab使用Copula仿真优化市场风险数据VaR分析
- 深圳大学计算机与软件学院李志,李志彬
- oracle 变长数组,oracle:变长数组varray,嵌套表,集合
- 2020 【第十一届蓝桥杯省赛】 C/C++ B组 (第二场)
- jQuery学习笔记01
- keras 多分类一些函数参数设置
- 超大规模文本数据清洗、查找、匹配神器之python模块flashtext学习使用
- Python绘制简单漂亮好玩的散点图
- html5 苹果手机上传word文件_DocumentsbyReaddle文件管理器,让你的苹果手机 更顺畅...
- 区块链 solana TPS吞吐率