看这范围都知道是状压吧。。。

  题目大意就不说了嘿嘿嘿

  网上流传的写法复杂度大都是O(2^n*n^2),这个复杂度虽然官方数据可以过,但是在洛谷上会TLE【百度搜出来前几个博客的代码交上去都TLE了】,于是造成了洛谷上这题提交5k3只AC了250人,AC率只有4.7%。。。【这么卡常真的丧病,还是因为老爷机?

  所以我就写写怎么优化吧OWO

  首先还是先求出两两猪的解析式和能穿过多少只猪,记得如果两个猪的横坐标相同就要continue,a和b的公式随手推一推。然后枚举状态数,再枚举哪两只猪被射,记得处理只射一只猪的情况。

  f[i|num[j][k]]=min(f[i|num[j][k]],f[i]+1);【num[j][k]为一只穿过第j只猪和第k只猪的鸟发射后的状态

  这就是(2^n*n^2)的写法,接下来优化。

  对于我们枚举的每一个状态i,我们找到它正数第一只没射掉的猪进行转移后break。

  因为如果我们转移了第一只后面的没射的猪,到时候还要回头来将第一只猪射掉,所以后面的没射的猪的转移其实是多余的,射完第一只猪后接着往后射就可以了。

  【当然只用正数第二只猪或者第三只猪或第四只或第五只转移都是可以的,一个道理。。。显然第一只最好写吧233

  优化之后就可以过洛谷的这题辣。

代码如下:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,t,num[][],f[];
double x[],y[];
bool same(double x,double y){return fabs(x-y)<1e-;}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++)scanf("%lf%lf",&x[i],&y[i]);
for(int i=;i<=n;i++)for(int j=;j<=n;j++)num[i][j]=;
for(int i=;i<n;i++)
for(int j=i+;j<=n;j++)
{
if(same(x[i],x[j]))continue;
double a=(y[j]/x[j]-y[i]/x[i])/(x[j]-x[i]);
if(a>=)continue;
double b=y[i]/x[i]-a*x[i];
for(int k=;k<=n;k++)
if(same(a*x[k]+b,y[k]/x[k]))num[i][j]|=(<<(k-));
}
for(int i=;i<=(<<n)-;i++)f[i]=;f[]=;
for(int i=;i<=(<<n)-;i++)
for(int j=;j<=n;j++)
if(!(i&(<<(j-))))
{
for(int k=j;k<=n;k++)
{
if(j==k)f[i|(<<(j-))]=min(f[i|(<<(j-))],f[i]+);
if(same(x[j],x[k]))continue;
f[i|num[j][k]]=min(f[i|num[j][k]],f[i]+);
}
break;
}
printf("%d\n",f[(<<n)-]);
}
}

NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化的更多相关文章

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

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

  2. [Luogu P2831] 愤怒的小鸟 (状压DP)

    题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. ...

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

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

  4. 洛谷P2831 愤怒的小鸟(状压dp)

    题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一 ...

  5. [noip2016]愤怒的小鸟<状压dp+暴搜>

    题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...

  6. 【题解】P2831 愤怒的小鸟 - 状压dp

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

  7. P2831 愤怒的小鸟 状压dp

    这个题主要是预处理比较复杂,先枚举打每只鸟用的抛物线,然后找是否有一个抛物线经过两只鸟,然后就没了. 题干: 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上 ...

  8. 暑假集训Day2 状压dp 特殊方格棋盘

    首先声明 : 这是个很easy的题 可这和我会做有什么关系 题目大意: 在n*n的方格棋盘上放置n个车,某些格子不能放,求使它们不能互相攻击的方案总数. 注意:同一行或同一列只能有一个车,否则会相互攻 ...

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

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

随机推荐

  1. 怎样从Java转换到Kotlin代码:现在就开始使用Kotlin(KAD 29)

    作者:Antonio Leiva 时间:Jul, 4, 2017 原文链接:https://antonioleiva.com/kotlin-from-java/ Kotlin最神奇特性之一是它能与Ja ...

  2. TW实习日记:第29-30天

    这两天挺忙,赶工期,改bug.项目现场的同事说客户火大得不行.可是谁叫你们谈工期谈的这么紧,完全不考虑开发的情况,真的是烦人这种事情.这两天遇到的最有难度的一个点就是附件预览,搞这个改到晚上11点. ...

  3. 深入理解 Vuejs 组件

    本文主要归纳在 Vuejs 学习过程中对于 Vuejs 组件的各个相关要点.由于本人水平有限,如文中出现错误请多多包涵并指正,感谢.如果需要看更清晰的代码高亮,请跳转至我的个人站点的 深入理解 Vue ...

  4. JavaScript 作用域链范例

    函数在执行的过程中,先从自己内部找变量 如果找不到,再从创建当前函数所在的作用域去找,以此往上 注意找的是变量的当前状态 范例 例1 var a=1 function fn1() { function ...

  5. Linux内核设计笔记10——内核同步

    Linux内核同步笔记 几个基本概念 - 临界区(critical region):访问和操作共享数据的代码段: - 原子操作:操作在执行中不被打断,要么不执行,要么执行完: - 竞争条件: 两个线程 ...

  6. HDU 4568 Hunter(最短路径+DP)(2013 ACM-ICPC长沙赛区全国邀请赛)

    Problem Description One day, a hunter named James went to a mysterious area to find the treasures. J ...

  7. vue.js学习之 跨域请求代理与axios传参

    vue.js学习之 跨域请求代理与axios传参 一:跨域请求代理 1:打开config/index.js module.exports{ dev: { } } 在这里面找到proxyTable{}, ...

  8. 数组的引用——用作形参&返回类型时

    一.数组的引用 切入:可以将一个变量定义成数组的引用(这个变量和数组的类型要相同) 形式: int odd[5] = {1, 3, 5, 7, 9}; int (&arr)[5] = odd; ...

  9. Thunder——基于NABCD评价“欢迎来怼”团队作品

    基于NABCD N——need需求 对于开设了软件工程课并且正在进行教学活动的老师和同学,除了在写作业时会打开电脑进行操作,平时我们更希望可以通过一些简单方便的方法来查看有关作业的内容,比如查看一下老 ...

  10. Word Ladder Problem (DFS + BFS)

    Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest t ...