题目什么大家都清楚

题解

我们知道,三点确定一条抛物线,现在这条抛物线过原点,所以任意两只猪确定一条抛物线。通过运算的出对于两头猪(x1,y1),(x2,y2),他们所在抛物线a=(y1*x2-y2*x1)/(x1*x1*x2-x1*x2*x2),b=(y1*x2*x2-y2*x1*x1)/(x1*x2*x2-x1*x1*x2)

由于猪很少,我们可以枚举出所有的抛物线,以及确定每一条抛物线能击中的猪
怎么确定射中所有猪的最优解呢?
状压DP
我们将猪的存活状态用二进制表示。
例如有8只猪,00000000表示8只猪都存活,00010001表示第1只和第5只挂掉了
这样,以存活状态作为下标,建立一个f[n]表示状态n的最优解
我们将每条抛物线射中的猪也用二进制表示。
利用位运算,对于抛物线s,f[n|s]=min(f[n|s],f[n]+1);
f[(1<<n)-1]就是答案
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long int
using namespace std;
const double E=1e-9;
const int maxn=1000005,INF=2000000000,P=1000000007; inline int read(){
int out=0,flag=1;char c=getchar();
while(c<48||c>57) {if(c=='-') flag=-1;c=getchar();}
while(c>=48&&c<=57){out=out*10+c-48;c=getchar();}
return out*flag;
} struct node{
double x,y;
}p[20]; double a,b;
inline void cal(int i,int j){
a=(p[i].y*p[j].x-p[j].y*p[i].x)/(p[i].x*p[i].x*p[j].x-p[i].x*p[j].x*p[j].x);
b=(p[i].y*p[j].x*p[j].x-p[j].y*p[i].x*p[i].x)/(p[i].x*p[j].x*p[j].x-p[i].x*p[i].x*p[j].x);
} inline bool isok(int i){
return fabs(a*p[i].x*p[i].x+b*p[i].x-p[i].y)<E;
} int v[maxn],vi=0,f[maxn],n,m; int main(){
int T=read();
while(T--){
vi=0;fill(f,f+maxn,INF);
n=read();m=read();
for(int i=1;i<=n;i++) {scanf("%lf%lf",&p[i].x,&p[i].y);v[++vi]=1<<(i-1);}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++){
cal(i,j);
if(a>=0||b<0) continue;
int s=0;
for(int k=1;k<=n;k++) if(isok(k)) s+=(1<<(k-1));
v[++vi]=s;
}
f[0]=0;
int End=(1<<n)-1;
for(int i=0;i<=End;i++)
for(int j=1;j<=vi;j++)
f[i|v[j]]=min(f[i|v[j]],f[i]+1);
printf("%d\n",f[End]);
}
return 0;
}

NOIP2016愤怒的小鸟 题解报告 【状压DP】的更多相关文章

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

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

  2. bzoj 2669 题解(状压dp+搜索+容斥原理)

    这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...

  3. BZOJ 1087 题解【状压DP】

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3112  Solved: 1816[Submit][ ...

  4. [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP

    在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...

  5. noi省选 [九省联考2018]一双木棋题解(状压dp)

    比浙江简单多了........ 题目转送:https://www.luogu.org/problemnew/show/P4363 分析: 我们注意到n和m都很小,考虑一下状压dp. 显然,棋子摆成的形 ...

  6. 洛谷P2831 愤怒的小鸟——贪心?状压DP

    题目:https://www.luogu.org/problemnew/show/P2831 一开始想 n^3 贪心来着: 先按 x 排个序,那么第一个不就一定要打了么? 在枚举后面某一个,和它形成一 ...

  7. 【NOIP2017】宝藏 题解(状压DP)

    题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 nnn 个深埋在地下的宝藏屋, 也给出了这 nnn 个宝藏屋之间可供开发的m mm 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中 ...

  8. LibreOJ 6177 题解(状压DP)

    题面 传送门 分析 刚看到这道题时想的是跟最短哈密顿路类似的二进制状压DP,先用floyd处理距离 但是此题用二进制不够,应该用三进制 0,1,2分别表示未送,正在送,已送完 dp[s][i]表示当前 ...

  9. 【FZYZOJ】愚人节礼物 题解(状压DP)

    前言:麻麻我会写状压DP了! ---------------------------- 题目描述 愚人节到了!可爱的UOI小朋友要给孩子们送礼物(汗-原题不是可爱的打败图么= =..).在平面直角坐标 ...

随机推荐

  1. Struts 2(八):文件上传

    第一节 基于Struts 2完成文件上传 Struts 2框架中没有提供文件上传,而是通过Common-FileUpload框架或COS框架来实现的,Struts 2在原有上传框架的基础上进行了进一步 ...

  2. (转载)C#提取汉字拼音首字母的方法

    今天突然要用到提取汉字拼音首字母的功能,去网上找了找,发现没有几个好用的,决定自己写一个,效果还不错,发出来大家一起研究下,分享给大家!直接入主题: 1.首先对编码进行定义 #region 编码定义 ...

  3. nmap保存结果

    nmap 192.168.0.2 -oX D:\myscan.xml 参数解释: -oN <filespec> (标准输出) -oX <filespec> (XML输出) -o ...

  4. 《算法图解》——第十章 K最近邻算法

    第十章    K最近邻算法 1 K最近邻(k-nearest neighbours,KNN)——水果分类 2 创建推荐系统 利用相似的用户相距较近,但如何确定两位用户的相似程度呢? ①特征抽取 对水果 ...

  5. 云主机启动提示Booting from Hard Disk GRUB

    版本:Openstack ocata 系统:centos7.3 环境:VMware workstation12 解决方法: 或者

  6. PRML学习笔记第一章

    [转] PRML笔记 - 1.1介绍 模式识别的目标 自动从数据中发现潜在规律,以利用这些规律做后续操作,如数据分类等. 模型选择和参数调节 类似的一族规律通常可以以一种模型的形式为表达,选择合适模型 ...

  7. Python学习之web框架 Flask

    一.通过PIP 安装Flask 1.1 Windows环境安装pip A.首先PIP进入官网(https://pypi.python.org/pypi/pip)下载gz包 B.对gz压缩包进行解压,解 ...

  8. 如何让QT程序以管理员权限运行(UAC)

    方案一:(仅适用于使用msvc编译器) 在PRO文件中添加一行指令即可, QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' ...

  9. Hyper-V虚拟机联网设置

    转自:http://www.3lian.com/edu/2012/12-22/50492.html Windows 8中内置的Hyper-V管理器可以说给许多人带来了惊喜!在Hyper-V管理器强大的 ...

  10. BZOJ 1559 JSOI2009 密码 状压dp+AC自动机+搜索

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1559 分析: 这个题意真的是很**啊!!!直接说每一个字符串至少出现一次不就好了吗... ...