luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)
由范围可以想到状压dp
两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的
这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下自己和自己确定的抛物线只经过自己)
然后设状态s表示目前已经有哪些点被击中了,然后我们钦定这次就要打那个最小的还没击中的点(因为吃枣都要打的嘛),再枚举出另一个还没经过的点,就能得到转移方程
$f[s|line[i][j]]=max\{f[s]+1\}$,其中$line[i][j]$表示i、j两点确定的抛物线经过的所有的点,i是s中还未击中的最小的点
复杂度是$O(n2^n)$
#include<bits/stdc++.h>
#define pa pair<int,int>
#define lowb(x) ((x)&(-(x)))
#define REP(i,n0,n) for(i=n0;i<=n;i++)
#define PER(i,n0,n) for(i=n;i>=n0;i--)
#define MAX(a,b) ((a>b)?a:b)
#define MIN(a,b) ((a<b)?a:b)
#define CLR(a,x) memset(a,x,sizeof(a))
#define rei register int
using namespace std;
typedef long long ll;
const int maxn=,maxs=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N;
double pos[maxn][];
int line[maxn][maxn];
int f[maxs],bin[maxn]; inline bool eq(double a,double b){return fabs(a-b)<=1e-;}
inline void getab(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));
} int main(){
// freopen("testdata.in","r",stdin);
int i,j,k;
for(i=,j=;i<=;i++,j<<=) bin[i]=j;
for(int T=rd();T;T--){
N=rd();rd();
for(i=;i<=N;i++) scanf("%lf%lf",&pos[i][],&pos[i][]);
for(i=;i<=N;i++){
for(j=i+;j<=N;j++){
double a,b;getab(a,b,pos[i][],pos[i][],pos[j][],pos[j][]); int s=;
if(a<){
for(k=;k<=N;k++ ){
if(eq(a*pos[k][]*pos[k][]+b*pos[k][],pos[k][])){
s|=bin[k];
}
}
}
line[i][j]=s;
// cout<<a<<" "<<b<<" "<<i<<" "<<j<<" "<<bitset<20>(s)<<endl;
}line[i][i]=bin[i];
}
memset(f,,sizeof(f));
f[]=;
for(i=;i<bin[N+]-;i++){
for(j=;bin[j]&i;j++);
for(k=j;k<=N;k++){
if(bin[k]&i) continue;
f[i|line[j][k]]=min(f[i|line[j][k]],f[i]+);
}
}printf("%d\n",f[bin[N+]-]);
} return ;
}
luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)的更多相关文章
- NOIP2016愤怒的小鸟 [状压dp]
愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...
- [noip2016]愤怒的小鸟<状压dp+暴搜>
题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...
- [Luogu P2831] 愤怒的小鸟 (状压DP)
题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. ...
- 洛谷P2831 愤怒的小鸟(状压dp)
题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一 ...
- NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化
看这范围都知道是状压吧... 题目大意就不说了嘿嘿嘿 网上流传的写法复杂度大都是O(2^n*n^2),这个复杂度虽然官方数据可以过,但是在洛谷上会TLE[百度搜出来前几个博客的代码交上去都TLE了], ...
- 【题解】P2831 愤怒的小鸟 - 状压dp
P2831愤怒的小鸟 题目描述 \(Kiana\) 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 \((0,0)\) 处,每次 \(Kiana\) 可以 ...
- P2831 愤怒的小鸟 状压dp
这个题主要是预处理比较复杂,先枚举打每只鸟用的抛物线,然后找是否有一个抛物线经过两只鸟,然后就没了. 题干: 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- Noip2016愤怒的小鸟(状压DP)
题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...
随机推荐
- Luogu P1966 火柴排队
这还是一道比较简单的题目,稍微想一下就可以解决.终于有NOIP难度的题目了 首先我们看那个∑(ai-bi)^2的式子,发现这个的最小值就是排序不等式 所以我们只需要改变第一组火柴的顺序,使它和第二组火 ...
- Ubuntu轻松编译openJDK
花了三天在windows上搞openJDK,对bash本来就不熟,加上各种莫名依赖和脚本里的bug,身心俱疲.最后make all的时候产生一个莫名其妙的错误说什么有warning且-Werror置为 ...
- LInux下设置账号有效时间 以及 修改用户名(同时修改用户组名和家目录)
在linux系统中,默认创建的用户的有效期限都是永久的,但有时候,我们需要对某些用户的有效期限做个限定!比如:公司给客户开的ftp账号,用于客户下载新闻稿件的.这个账号是有时间限制的,因为是付费的.合 ...
- springboot undertow替换tomcat方式
版权声明: https://blog.csdn.net/weixin_38187317/article/details/81532560说明 undertow,jetty和tomcat可 ...
- Daily scrum 12.24
平安夜闲得想来一遍scrum,添加了之前ui组的数据库问题修复任务. 其实是之前忘记在任务中添加了.现在基本修复完成. Member Today’s task 林豪森 与学霸其他小组交流,处理整合问题 ...
- 个人博客作业-Week1
1.五个问题 1) 团队编程中会不会因为人们意见的分歧而耽误时间,最终导致效率降低? 2)软件团队中测试的角色应该独立出来吗 3)对于团队编程,如果没有时间测试他人的新功能,因此就不添加该新功能,那会 ...
- Java实验二
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1351 姓名:黄君如 学号:20135117 成绩: 指导教师:娄 ...
- mysql执行 sql文件遇到USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8错误
使用navcat在导入别人发的mysql数据的时候,报了下面这个错误: [Err] 1064 - You have an error in your SQL syntax; check the man ...
- Spring源码阅读学习一
昨天抽时间阅读Spring源码,先从spring 4.x的core包开始吧,除了core和util里,首当其冲的就是asm和cglib. 要实现两个类实例之间的字段的复制功能: 多年之前用C#,因为阅 ...
- VUE的语法笔记
v-model = 'content' {{contents}} //vue 双向视图的绑定 v-text 只能返回一个文本内容 v-html 不仅可以返回文本内容还可以返回html标签 v-for ...