题目链接:https://vijos.org/p/2008

现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了。。。

这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就O(n^3)

【思路】

先枚举任意两个的抛物线,这个位置需要O(n^2),接着针对每一个抛物线看可以经过多少点,暴力跑一个,时间复杂度O(n^3),不过这一步可以在枚举抛物线时做。。

接着是用一个数组mark[i][j]记录经过点i,j的抛物线可以穿过哪些点。。这个位置,我们就可以用状态压缩解决,一个二进制,第i位为1表示可以穿过这个点,0则不行

然后就是f数组,f[i]的i状态下需要多少个鸟去打,i的二进制下表示当前有哪些点被穿过了,然后i的范围在二进制下就是0到11111111(n个1)

然后就是最后一个大循环,首先判断能不能达到状态i,如果可以就枚举第j的点,如果没有被穿过就是f[i|state[j]]=min(f[i|state[j]],f[i]+1)

(要么是原来的状态,要么从当前状态发射一只鸟)

接着就是枚举从j穿过的抛物线类型,f[i|mark[j][k]]=min(f[i|mark[j][k]],f[i]+1)

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define maxn 30
#define LL long long
using namespace std; double x[maxn],y[maxn];
double ex=1e-;
int mark[maxn][maxn];
int f[(<<)+],state[maxn];
int n,m; void work(){
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
scanf("%lf%lf",&x[i],&y[i]);
}
memset(mark,,sizeof(mark));
for(int i=;i<n;i++){
for(int j=i+;j<n;j++){
double x1=x[i],x2=x[j],y1=y[i],y2=y[j];
double a=(x1*y2-y1*x2)/(x1*x2*x2-x1*x1*x2);
if(a>=)continue;//抛物线,开口向下
double b=(y1-a*x1*x1)/x1;
for(int k=;k < n;k++){
if(abs(y[k]-x[k]*x[k]*a-x[k]*b)<=ex){
//误差范围内,近似为0
//if(!(mark[i][j]&state[k]))mark[i][j]|=state[k];
mark[i][j]+=state[k];
}
}
}
}
memset(f,,sizeof(f));
int inf=f[];f[]=;
int lim=(<<n)-;//最终状态是11111111111 for(int i=;i<=lim;i++){//枚举每种状态
if(f[i]!=inf){
for(int j=;j<n;j++){
if(!(i&state[j])){//当前状态没有j
int now=i|state[j];
f[now]=min(f[i]+,f[now]);
//可以从f[i]再射出一只
for(int k=j+;k<n;k++){
int noww=i|mark[j][k];//j,k抛物线的所有猪
f[noww]=min(f[i]+,f[noww]);
}
}
}
} }
printf("%d\n",f[lim]);
} int main(){
int T;
scanf("%d",&T);
state[]=;
for(int i=;i<=;i++)
state[i]=state[i-]<<;
while(T--){
work();
}return ;
}

【总结】

当题中的问题状态可以转换成0,1表示的时候,可以考虑用状压dp,不过要正确使用二进制

[noip2016]愤怒的小鸟<状压dp+暴搜>的更多相关文章

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

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

  2. 【洛谷P2831】[NOIP2016]愤怒的小鸟

    愤怒的小鸟 题目链接 本来是刷状压DP的,然而不会.. 搜索是比较好想的,直接dfs就行了 我们可以知道两只猪确定一条抛物线 依次处理每一只猪,有以下几种方法: 1.先看已经建立的抛物线是否能打到这只 ...

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

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

  4. [NOIP2016]愤怒的小鸟

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

  5. Noip2016愤怒的小鸟(状压DP)

    题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...

  6. [NOIP2016]愤怒的小鸟 D2 T3

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

  7. luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)

    由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下 ...

  8. NOIP2016愤怒的小鸟 题解报告 【状压DP】

    题目什么大家都清楚 题解 我们知道,三点确定一条抛物线,现在这条抛物线过原点,所以任意两只猪确定一条抛物线.通过运算的出对于两头猪(x1,y1),(x2,y2),他们所在抛物线a=(y1*x2-y2* ...

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

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

  10. 洛谷 2831 (NOIp2016) 愤怒的小鸟——仅+1所以bfs优化

    题目:https://www.luogu.org/problemnew/show/P2831 状压dp.跑得很慢.(n^2*2^n) 注意只打一只猪的情况. #include<iostream& ...

随机推荐

  1. 不要忽视Managed code stripping的副作用

    0x00 前言 Unity 2018.3之后,新的“Managed Stripping Level”选项将替换 player settings 中原有的“Stripping Level”选项. 这个新 ...

  2. JUC-八锁现象和不安全锁

    1,被 synchronized 修饰的方法,锁的对象是方法的调用者(实例对象) 2,被 static 修饰的方法,锁的对象就是 Class模板对象,这个则全局唯一 问题7: 一个普通同步方法,一个静 ...

  3. Tomcat 之startup.bat启动失败案例

    今天我在部署一个Tomcat环境时,各种变量都配置完了,最后启动Tomcat时,Tomcat一闪而过,当时我的内心是崩溃的~~ 然后我就开始百度.定位问题.进入cmd命令行窗口,cd进入到Tomcat ...

  4. SpringCloud第二代实战系列:一文搞定Nacos实现服务注册与发现

    一.背景:SpringCloud 生态圈 在正式开始本篇文章之前我们先岔开来讲一下SpringCloud的生态圈. SpringCloud大家都比较熟悉了,它制定了分布式系统的标准规范,做了高度抽象和 ...

  5. Feign 注解翻译器 三

    一.自定义注解翻译器 (1)JAXRS 注解翻译器实例 ① 导入JAXRS所需要的jar包 <dependency> <groupId>io.github.openfeign& ...

  6. 异常 context 包的扫描

    异常信息: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 55; schema_reference.4: 无法读取方案文档 ' ...

  7. windows上用putty从linux上下载文件

    我之前使用putty都是直接从网上下的putty.exe,其实如果想下载windows的mis二进制文件,系统安装的话会包含,pscp.psftp.puttygen等一系列的文件. 今天下从服务器上, ...

  8. Linux apache让网页编码错误

    今天帮一个小伙伴搞作业,遇到安装discuz乱码问题,就顺便在这里写一下,以供其他同学纠正. 开apache配置文件/etc/httpd/conf/httpd.conf 查找AddDefaultCha ...

  9. OpenWrt tcpdump 抓包

    路由器用的是 网件的 4300 刷的是石像鬼双固件 1, 安装支持库opkg updateopkg install libpcapopkg install tcpdump 2, 设置条件开始捕获tcp ...

  10. Openwrt 路由器上 安装 svn server

    Openwrt 上也可以搭建 svn 服务了,这样就不用开着 ubuntu 了,省电. 在后台打开 ssh 服务,或者使用 telnet 服务,使用 putty 登录路由器. 如下图所示,这里刷的是 ...