NOIP2016愤怒的小鸟
来源:互联网 发布:小内存win10平板优化 编辑:程序博客网 时间:2024/04/29 20:47
愤怒的小鸟
【题目分析】
比赛的时候,觉得这是近年来noip的常规套路,又是暴搜?可是自己估一下复杂度,就感觉药丸。但是没有办法啊,只会敲一个50分的暴力。
后来大神跟我说,这个是状态压缩…没有学过…
后来在网上自学了一下状压,基本是什么意思懂了:dp就是从一个原来的01状态,向现在的状态转移。只不过因为如果要存每只鸟是否被打过,数组要开17维。
【代码】
#define M 20#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;double a,b,x[M],y[M];int dp[1<<M],g[M][M];int n,m,cas;bool chk(double x,double y){ if(x>y)return x-y<(1e-6); return y-x<(1e-6);}void MIN(int &x,int y){ if(x>y)x=y;}int main(){ int i,j,k; scanf("%d",&cas); while(cas--){ scanf("%d %d",&n,&m); for(i=1;i<=n;i++)scanf("%lf %lf",&x[i],&y[i]); memset(g,0,sizeof(g)); for(i=1;i<=n;i++){ for(j=i+1;j<=n;j++){ if(chk(x[i],x[j]))continue; a=(y[j]*x[i]-y[i]*x[j])/((x[j]-x[i])*x[i]*x[j]); if(a>=0)continue; b=(y[i]-a*x[i]*x[i])/x[i]; int t=0; for(k=1;k<=n;k++){ if(chk(a*x[k]+b,y[k]/x[k]))t+=(1<<(k-1)); }g[i][j]=t; } } memset(dp,63,sizeof(dp)); dp[0]=0; for(i=0;i<(1<<n);i++){ for(j=1;j<=n;j++){ if(i&(1<<(j-1)))continue; for(k=j+1;k<=n;k++)MIN(dp[i|g[j][k]],dp[i]+1); MIN(dp[i|(1<<(j-1))],dp[i]+1); } }printf("%d\n",dp[(1<<n)-1]); }return 0;}
2 0
- [NOIP2016] 愤怒的小鸟
- NOIP2016愤怒的小鸟
- [NOIP2016]愤怒的小鸟
- 【NOIP2016】愤怒的小鸟
- NOIP2016 愤怒的小鸟
- NOIP2016 T6 愤怒的小鸟
- [noip2016]愤怒的小鸟 题解
- 【NOIP2016提高组day2】愤怒的小鸟
- 【NOIP2016】洛谷2831 愤怒的小鸟
- NOIP2016提高组day2 愤怒的小鸟
- 【NOIP2016提高组复赛】愤怒的小鸟
- noip2016 愤怒的小鸟 状压搜索
- 【NOIP2016】【CJOJ2257】2257 愤怒的小鸟
- [NOIP2016][状压DP]愤怒的小鸟
- 洛谷P2831 [Noip2016]愤怒的小鸟
- [NOIP2016真题]愤怒的小鸟
- NOIP2016愤怒的小鸟(洛谷2831)
- NOIP2016 愤怒的小鸟 [状压DP]
- 分治 小车载人问题
- 广度优先遍历BFS
- Linux_3th_第1个linux驱动___编译空壳驱动程序
- SSL1125 集合
- 5.3 Swift函数的内部和外部参数
- NOIP2016愤怒的小鸟
- 求有向图的强连通分量<Tarjan>
- 5.4 Swift函数的默认参数
- Android Studio2.2下NDK开发初试
- 学习 Reflux 填过的坑
- Android NFC开发的那些坑
- 5.5 Swift参数的常量和变量特性
- 阿里大于短信接口thinkphp
- 修改 myEclipse 自动生成注释模板