NOIP2017 D2T3 题解
这种数据范围不是乱搞dfs就是乱搞状压DP
首先应该通过任一方式求出a和b的值;
任意一条抛物线只用两头猪就可以确定,所以我们N^2枚举,并把在这两头猪的抛物线上的猪都存进状态state[i][j];
然后枚举任意两个还没消灭的小猪i,j;f[i|state[j][k]]=min(f[i|state[j][k]],f[i]+1);
因为有些小猪只能单独被消灭,所以:f[i|(1<<j-1)]=min(f[i|(1<<j-1)],f[i]+1);
然后就好了:
#include <bits/stdc++.h>
#define eps 1e-7
#define inc(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
struct node{
double x;
double y;
}pig[20];
int f[1000010];
int bo[21];
int n,m;
int work(int pig1,int pig2)
{
if(pig[pig1].x==pig[pig2].x) return 0;
double x1=pig[pig1].x,x2=pig[pig2].x,y1=pig[pig1].y,y2=pig[pig2].y;
double tmpx=x1*x1*x2-x2*x2*x1,tmpy=y1*x2-y2*x1;
double a=tmpy/tmpx,b=(y1-a*x1*x1)/x1;
if(a>=0) return 0;
int res=0; bo[pig1]=bo[pig2]=1;
inc(i,1,n){
double x=pig[i].x,y=pig[i].y;
if(fabs(a*x*x+b*x-y)<eps) res|=1<<(i-1),f[1<<(i-1)]=f[res]=1;
}
return res;
}
int state[110][110];
int main()
{
int t;
cin>>t;
while(t--){
memset(f,0x3f,sizeof(f));
memset(state,0,sizeof(state));
memset(bo,0,sizeof(bo));
scanf("%d%d",&n,&m);
inc(i,1,n) scanf("%lf%lf",&pig[i].x,&pig[i].y),f[1<<i-1]=1;
inc(i,1,n) inc(j,1,i-1) state[i][j]=work(i,j);
inc(i,1,(1<<n)-1) inc(j,1,n){
if((i>>j-1)&1==1)continue;
inc(k,1,j-1){
if(i&(1<<k-1)==1) continue;
f[i|state[j][k]]=min(f[i|state[j][k]],f[i]+1);
}
f[i|(1<<j-1)]=min(f[i|(1<<j-1)],f[i]+1);
}
cout<<f[(1<<n)-1]<<endl;
}
}
NOIP2017 D2T3 题解的更多相关文章
- [luogu P3960] [noip2017 d2t3] 队列
[luogu P3960] [noip2017 d2t3] 队列 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Syl ...
- NOIP2017 列队 题解报告【56行线段树】
题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n \times mn×m名学生,方阵的行数 ...
- NOIP2017总结 & 题解
day1t1的结论貌似在哪见过,自己稍微验证了一下貌似没记错就没有管了.t2一道很好(keng)的模拟题啊t3自己做题好慢啊,想出来dp打上去最后几分钟才过了大样例,我写的是记忆化搜索,判-1很好判, ...
- NOIP2017 宝藏 题解报告【状压dp】
题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...
- 【学术篇】NOIP2017 d2t3 列队phalanx splay做法
我可去他的吧.... ==============先胡扯些什么的分割线================== 一道NOIP题我调了一晚上...(其实是因为昨晚没有找到调试的好方法来的说...) 曾经我以 ...
- [NOIp2017]宝藏 题解
非常巧妙的 \(O(n^23^n)\) 做法. 题目的本质是要求一棵生成树,使得其每条边的长度与这条边的起点深度乘积的和最小. 我们使用状压 DP,考虑到当前状态与已经打通的点和深度有关,不妨设 \( ...
- noip2017普及题解
https://www.luogu.org/problemnew/show/3954 https://www.luogu.org/problemnew/show/3955 https://www.lu ...
- NOIP2017 D2T3列队
这题我改了三天,考场上部分分暴力拿了50,考完试发现与正解很接近只是没写出来. 对于每一行和最后一列建n+1颗线段树,维护前缀和. 复杂度qlogn 假如你移动一个坐标为(x,y)的人,你要将第x行线 ...
- noip2017简要题解。
重新写了一下去年的题来看看自己到底是有多傻逼. 小凯的疑惑 打表. 时间复杂度 搞了一大坨题面,但是真正有用的信息只有几个: 判断他给你的复杂度是多少. 判断当前循环进不进的去. 判断当前循环产生的贡 ...
随机推荐
- Telnet/SSH 客户端
一.WinSCP linux 与 windows 间传递文件.可以与 putty 配合使用. 官网提供便携版下载:https://winscp.net/eng/downloads.php 支持中文,语 ...
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- vue问题六:计算属性,依赖发生变化时,重新计算computed:
<el-form-item label="单价:" prop="price" > <el-input v-model="addfor ...
- vue调试工具vue-devtools安装
vue-devtools是一款基于chrome浏览器的插件,用于vue应用的调试,这款vue调试神器可以极大地提高我们的调试效率.帮助我们快速的调试开发vue应用. 这里介绍一下vue-devtool ...
- 搭建与破解wiki (confluence)
搭建环境: 操作系统:contos7 数据库:5.5.60-MariaDB java版本: jdk-11.0.2 confluence版本:confluence6.7.1 一. 准备工作 下载conf ...
- 阶段3 3.SpringMVC·_07.SSM整合案例_03ssm整合之编写Spring框架
做整合要保证每个框架单独使用 先搭建Spring的框架,然后再整合别的框架.Spring是业务层的框架 spring的配置文件 这就表示是spring的配置文件 默认的约束不够,需要修改. <b ...
- MySQL数据表列转行
简单例子 数据结构如下 use dataTest create table t_score ( name ) , subject ), grade ,) ) INSERT INTO `t_score` ...
- 为什么能抓到网站https传输的明文密码?------顺便说说“知乎”和“支付宝”的安全性对比
在多数人看来, https是安全的, 因为https和secure http嘛, 真的是这样吗? 一些人认为, https是加密传输, 所以抓到包也没有用, 是密文的. 真是的这样吗? 我今天无意抓到 ...
- 从gopath到go mod的一次尝试
windows下的尝试: gomod初尝试下载官方包1.11(及其以上版本将会自动支持gomod) 默认GO111MODULE=auto(auto是指如果在gopath下不启用mod)go mod h ...
- 学习ansible笔记1
ansible的特点: -- 模块化设计 -- 仅需要ssh和Python即可以使用 -- 无客户端 -- 功能强大,模块丰富 -- 上手容易门槛低 -- 基于python开发,做二次开发更容易 -- ...