【Luogu】P2831愤怒的小鸟(手算抛物线+状压DP)
设f[s]表示二进制集合表示下的s集合都打掉用了多少小鸟。
预处理出lne[i][j]表示i、j确定的抛物线能打掉的小鸟集合。
于是就有f[s|lne[i][j]]=min(f[s|lne[i][j]],f[s]+1);
什么?两个点确定不了抛物线?原点是不是被忘掉了……
代码如下
#include<cstdio>
#include<cctype>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
double x[],y[];
int lne[][];
int f[]; int main(){
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
memset(lne,,sizeof(lne));
memset(f,,sizeof(f));
for(int i=;i<=n;++i) cin>>x[i]>>y[i];
for(int i=;i<=n;++i)
for(int j=;j<=n;++j){
if(i==j) continue;
double d=y[j]-(y[i]/x[i]*x[j]),c=x[j]*(x[j]-x[i]);
double a=d/c,b=(y[i]-x[i]*x[i]*a)/x[i];
if(a<)
for(int k=;k<=n;++k)
if(abs(x[k]*x[k]*a+x[k]*b-y[k])<=1e-) lne[i][j]|=(<<(k-));
}
int Max=(<<n)-;
for(int i=;i<=n;++i) f[<<(i-)]=;
f[]=;
for(int i=;i<=Max;++i){
int pos=;
while(i>>(pos-)&) ++pos;
if(f[i|(<<(pos-))]>f[i]+) f[i|(<<(pos-))]=f[i]+;
for(int j=pos+;j<=n;++j)
f[i|lne[pos][j]]=min(f[i|lne[pos][j]],f[i]+);
}
printf("%d\n",f[Max]);
}
return ;
}
【Luogu】P2831愤怒的小鸟(手算抛物线+状压DP)的更多相关文章
- 洛谷P2831 愤怒的小鸟——贪心?状压DP
题目:https://www.luogu.org/problemnew/show/P2831 一开始想 n^3 贪心来着: 先按 x 排个序,那么第一个不就一定要打了么? 在枚举后面某一个,和它形成一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- Luogu 2157 [SDOI2009]学校食堂 - 状压dp
Solution 比较好想的dp, 但是坑不少QAQ, 调半天 由于容忍度 $b_i$<= 7, 所以可以考虑将第$i$个人接下来的$b_i$ 个人作为一个维度记录状态. 于是我们定义数组$f[ ...
- 洛谷 P3112 后卫马克 —— 状压DP
题目:https://www.luogu.org/problemnew/show/P3112 状压DP...转移不错. 代码如下: #include<iostream> #include& ...
- 洛谷 3112 [USACO14DEC]后卫马克Guard Mark——状压dp
题目:https://www.luogu.org/problemnew/show/P3112 状压dp.发现只需要记录当前状态的牛中剩余承重最小的值. #include<iostream> ...
- [Luogu P2831] 愤怒的小鸟 (状压DP)
题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. ...
- 洛谷P2831 愤怒的小鸟(状压dp)
题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一 ...
- NOIP2016愤怒的小鸟 [状压dp]
愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...
- Noip2016愤怒的小鸟(状压DP)
题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...
随机推荐
- Eclipse-运行符-数据类型转换-环境变量配置
1.能够使用Eclipse快捷键 ctrl + / 单行注释:再按一次则取消: ctrl + shift + / 多行注释: ctrl + shift + \ 取消多行注释: ctrl + ...
- windows Git的安装和使用
一.本人是根据廖雪峰大神的个人官网学习的git,并有感而发以做笔记的方式写下这篇博客,希望可以帮助到自己和其他人,廖雪峰个人官网http://www.liaoxuefeng.com/ 二.声明我的电脑 ...
- React学习实例总结,包含yeoman安装、webpack构建
1.安装yeoman 在安装nodeJs的基础上,输入命令:npm install -g yo grunt-cli bower,安装yeoman,grunt,bowerify 安装完成后,输入命令:y ...
- js3
举几个小例子: 1. 九九乘法表 var s = "<table>"; for (var i=1;i<=9;i++) { s += "<tr> ...
- POJ 3162 Walking Race (树的直径,单调队列)
题意:给定一棵带边权的n个节点的树,首先要求出每个点的最长路,然后写成序列d[1],d[2]...d[n],然后求满足 区间最大值-区间最小值<=k 的最大区间长度为多少? 思路: 分两步进行: ...
- 转载:使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...
- CAD交互绘制圆形批注(网页版)
js中实现代码说明: 动态拖放时的绘制事件: function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGui ...
- 小白安装python软件
首先下载:anaconda3.x 下载方式:百度搜索 清华镜像anaconda https://mirrors.tuna.tsinghua.edu.cn/help/anacond ...
- UEditor练习(JSP版)
下载1.4.3.3jsp版本的源码. <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- github更换仓库
1.找到.git目录 2.打开config文件 3.修改仓库地址 4.重新提交 git push --all origin 这样就替我们的项目换仓啦!!!^_^ 分类: git 参考资料: h ...