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

题目描述

Kiana最近沉迷于一款神奇的游戏无法自拔。

简单来说,这款游戏是在一个平面上进行的。

有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y=ax2+bx的曲线,其中a,b是Kiana指定的参数,且必须满足a<0。

当小鸟落回地面(即x轴)时,它就会瞬间消失。

在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi)。

如果某只小鸟的飞行轨迹经过了(xi,yi),那么第i只小猪就会被消灭掉,同时小鸟将会沿着原先的轨迹继续飞行;

如果一只小鸟的飞行轨迹没有经过(xi,yi),那么这只小鸟飞行的全过程就不会对第i只小猪产生任何影响。

例如,若两只小猪分别位于(1,3)和(3,3),Kiana可以选择发射一只飞行轨迹为y=-x2+4x的小鸟,这样两只小猪就会被这只小鸟一起消灭。

而这个游戏的目的,就是通过发射小鸟消灭所有的小猪。

这款神奇游戏的每个关卡对Kiana来说都很难,所以Kiana还输入了一些神秘的指令,使得自己能更轻松地完成这个游戏。这些指令将在【输入格式】中详述。

假设这款游戏一共有T个关卡,现在Kiana想知道,对于每一个关卡,至少需要发射多少只小鸟才能消灭所有的小猪。由于她不会算,所以希望由你告诉她。

输入

第一行包含一个正整数T,表示游戏的关卡总数。

下面依次输入这T个关卡的信息。每个关卡第一行包含两个非负整数n,m,分别表示该关卡中的小猪数量和Kiana输入的神秘指令类型。接下来的n行中,第i行包含两个正实数(xi,yi),表示第i只小猪坐标为(xi,yi)。数据保证同一个关卡中不存在两只坐标完全相同的小猪。

如果m=0,表示Kiana输入了一个没有任何作用的指令。
如果m=1,则这个关卡将会满足:至多用n/3+1只小鸟即可消灭所有小猪。
如果m=2,则这个关卡将会满足:一定存在一种最优解,其中有一只小鸟消灭了至少n/3只小猪。

保证1<=n<=18,0<=m<=2,0<xi,yi<10,输入中的实数均保留到小数点后两位。

输出

对每个关卡依次输出一行答案。

输出的每一行包含一个正整数,表示相应的关卡中,消灭所有小猪最少需要的小鸟数量

样例输入

2
2 0
1.00 3.00
3.00 3.00
5 2
1.00 5.00
2.00 8.00
3.00 9.00
4.00 8.00
5.00 5.00

样例输出

1 1


题解

状态压缩dp

这题也真是够坑。。。

考试时写了搜索,毕竟14年就没出搜索。然而出乎意料,这题竟然是16年的第二道dp,

还是考试前一直觉得不会考的一种dp。。。

f[i]表示状态为i的猪全部打掉需要的最少次数。

易推出伪代码f[i]=min(f[i],f[i^A]+1),A为每次打的集合。

为什么说是伪代码?因为A很难确定。

枚举子集的话,时间复杂度O(3^n),TLE。

所以不能枚举子集。

枚举点?先枚举情况,然后枚举两个点,再处理其余点,时间复杂度O(2^n*n^3),85分。

于是我们想到初始化。

本着能打则打的贪心原则,可以先把点j和点k所在抛物线上所有点存起来,状态转移时,

集合A即为i&g[j][k],省略了一重循环,AC。

当然还是有更好的优化(见代码)。

由于打的顺序对结果没有影响,所以可以默认先打标号较小的小鸟,这样时间复杂度会更低。

然而最坑的是精度问题。

不加精度肯定会跪,至于跪多少,考试时自己没加精度得了0分。。。

精度太低也不行,亲测1e-4 90分,1e-5 95分。

所以精度很重要,最好是1e-6,不会被卡,可以过。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define eps 1e-6
using namespace std;
double x[20] , y[20];
int f[262150] , g[20][20];
int main()
{int T;scanf("%d" , &T);while(T -- ){memset(g , 0 , sizeof(g));int n , m , i , j , k;double a , b;scanf("%d%d" , &n , &m);for(i = 0 ; i < n ; i ++ )scanf("%lf%lf" , &x[i] , &y[i]);for(i = 0 ; i < n ; i ++ ){for(j = 0 ; j < n ; j ++ ){if(i != j){a = (x[j] * y[i] - x[i] * y[j]) / (x[i] * x[j] * (x[i] - x[j]));b = (x[j] * x[j] * y[i] - x[i] * x[i] * y[j]) / (x[i] * x[j] * (x[j] - x[i]));if(a <= -eps)for(k = 0 ; k < n ; k ++ )if(fabs(a * x[k] * x[k] + b * x[k] - y[k]) <= eps)g[i][j] |= 1 << k;}}}f[0] = 0;for(i = 1 ; i < (1 << n) ; i ++ ){for(j = 0 ; j < n ; j ++ )if((1 << j) & i)break;f[i] = f[i ^ (1 << j)] + 1;for(k = 0 ; k < n ; k ++ )if(k != j && (1 << k) & i)f[i] = min(f[i] , f[i ^ (i & g[j][k])] + 1);}printf("%d\n" , f[(1 << n) - 1]);}return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/6212798.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2217):react元素渲染之时钟

index.js import React from react; import ReactDOM from react-dom; import ./index.css; import App from ./App;//<app/>js的普通对象 /*let app < App / >let root document.getElementById(root)let h1<h1>helloworld<span>我是</span>…

winmail计算机三级,2016年计算机三级网络技术机考模拟题(1)

1、Winmail用户使用0utlook发送邮件时&#xff0c;使用协议是(  )。A&#xff0e;HTTPB&#xff0e;IMAPC&#xff0e;POP3D&#xff0e;SMTP2、子网掩码为255&#xff0e;128&#xff0e;0&#xff0e;0&#xff0c;该掩码又可以写为(  )。A&#xff0e;&#xff0f;8B&am…

SQLServer全文检索无内容

检查全文索引指定表是否设置为自动填充&#xff1a; 全文索引——属性——表/视图点击左侧表&#xff0c;下方跟踪更改改为自动即可。

设计模式6大原则简述

0、前言 这一段时间一直在看设计模式&#xff0c;里面分多次提到几个设计原则&#xff0c;看了几次发现记不清楚&#xff0c;还是得自己动手总结一下吧&#xff0c;把书上的理论先理解写下来再说喽。 1、单一职责原则 定义&#xff1a;不要存在多于一个导致类变更的原因&#x…

前端学习(2216):react元素渲染

index.js import React from react; import ReactDOM from react-dom; import ./index.css; import App from ./App;//<app/>js的普通对象 let app < App / >let root document.getElementById(root)let h1<h1>helloworld<span>我是</span>&l…

SQLServer LIKE 通配符

将通配符作为文字使用 可以将通配符模式匹配字符作为文字字符使用。若要将通配符作为文字字符使用&#xff0c;请将通配符放在方括号中。下表显示了几个使用 LIKE 关键字和 [ ] 通配符的示例。 符号含义 LIKE 5[%] 5% LIKE [_]n _n LIKE [a-cdf] a、b、c、d 或 f LIKE [-acdf] …

计算机应用基础专科作业二,电子科大18秋《计算机应用基础(专科)》在线作业2...

电子科大18秋《计算机应用基础(专科)》在线作业2谋学网http://doc.docsou.com【奥鹏】[电子科技大学]18秋《计算机应用基础(专科)》在线作业2试卷总分:100 得分:100第1题,在浏览网页中&#xff0c;下列可能泄露隐私的是()。A、HTML文件B、文本文件C、CookieD、应用程序第2题,IP…

苹果ipadwps_ipad可以用wps吗?

展开全部可以。Ipad由于采用ARM架构&#xff0c;62616964757a686964616fe59b9ee7ad9431333431346435不能兼容普通PC台式机和笔记本的程序&#xff0c;但可以通过安装由Apple提供的iWork套件进行办公&#xff0c;也可以通过iOS第三方软件预览和编辑Office和PDF文件。而WPS又可以…

【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案

三、JavaScript部分 1、谈谈你对Ajax的理解&#xff1f;(概念、特点、作用) AJAX全称为“Asynchronous JavaScript And XML”&#xff08;异步JavaScript和XML&#xff09; 是指一种创建交互式网页应用的开发技术、改善用户体验&#xff0c;实现无刷新效果。 优点a、不需要插件…

前端学习(2219):react之jsx小案例

import React from react; import ReactDOM from react-dom; import ./index.css; import App from ./App; import { tsPropertySignature } from babel/types;//<app/>js的普通对象 /*let app < App / >let root document.getElementById(root)let h1<h1>…

IL编译反编译

运行VS命令提示反编译到ILildasm /source DemoCrack.exe /out:crack.il 编译il到exeilasm crack.il

spark 不同模式用途_Spark 的四种模式

1.spark主要有四种运行模式&#xff1a;Loca 、standalone、yarn、mesos。1)Local模式&#xff1a;在一台机器上&#xff0c;一般用于开发测试2)standalone模式&#xff1a;完全独立的spark集群&#xff0c;不依赖其他集群&#xff0c;分为Master和work。客户端向Master注册应用…

软件测试人员棘手的问题,软件测试的棘手问题:如何避免重复提交缺陷

对于测试工程师来说&#xff0c;无论是新手还是老手&#xff0c;测试久了&#xff0c;尤其是遇到一些复杂的项目&#xff0c;难免会犯重复提交缺陷的错误。那么问题来了&#xff0c;我们要怎样避免这类诟病呢&#xff1f;换句话说&#xff0c;怎样才能避免缺陷的重复提交&#…

前端学习(2220):react之jsx的样式小案例

import React from react; import ReactDOM from react-dom; import ./index.css; import ./App.css import App from ./App; import { tsPropertySignature } from babel/types;//<app/>js的普通对象 /*let app < App / >let root document.getElementById(root…

.Net DES加密解密(不带向量)

/// <summary>/// DES加密字符串/// </summary>/// <param name"encryptString">待加密的字符串</param>/// <param name"Key">密钥</param>/// <returns>加密成功返回加密后的字符串&#xff0c;失败返回源串&…

SyntaxError: Non-UTF-8 code starting with '\xba' in file 错误的解决方法!!

第一次在Eclipse建立python工程&#xff0c;添加了自己新建的文件&#xff0c;写了一点代码&#xff0c;随后执行时候出现了错误&#xff0c;和昨天我在Visual Studio 2015里面一样&#xff0c;错误&#xff1a; SyntaxError: Non-UTF-8 code starting with \xba in file G:\wo…

开机预读快还是不预读快_WIN 7下的超级预读比VISTA要好,改进不少!推荐开启超级预读!...

预读技术是微软vista和windows7默认开启的程序&#xff0c;原意是增加程序运行和开机速度&#xff0c;但事与愿违&#xff0c;该技术已经变成与UAC几乎一样的垃圾&#xff0c;普通用户建议关闭&#xff0c;原因有&#xff1a;1、程序本身额外增加系统负担&#xff0c;启用就多运…

朋友圈计算机代码,微信小程序仿朋友圈代码

【实例简介】微信小程序实现朋友圈页面。UGC发布&#xff0c;包含获取用户授权信息。【实例截图】【核心代码】circle├── circle│ ├── app.js│ ├── app.json│ ├── app.wxss│ ├── components│ │ └── list│ │ ├── list.js│ │ …

如何在excel不同的工作表之间使用数据有效性?

选择“数据有效性”之后&#xff0c;在“允许”里从下拉列表里选择“列表” 在“源”中输入“INDIRECT("表名!$列名$行名:$列名$行名")如I列的3到7行:INDIRECT("Sheet2!$I$3:$I$7")或INDIRECT("Sheet2!I3:I7") 指定一列 INDIRECT("Sheet2!$…

三维向量变化为角度_物体的三维识别与6D位姿估计:PPF系列论文介绍(四)

作者&#xff1a;仲夏夜之星Date&#xff1a;2020-04-14来源&#xff1a;物体的三维识别与6D位姿估计&#xff1a;PPF系列论文介绍(四)文章“3D Pose Estimation of Daily ObjectsUsing an RGB-D Camera”2012发表在IEEE/RSJInternational Conference on Intelligent Robots an…