• P2831 愤怒的小鸟


    ————————————————————————————————————————————————————————————

    玄学调精度

    被if else的嵌套搞了,压行选手的痛,以后还是要注意点

    ——————————————————————————————————————————————————————————

    #include<bits/stdc++.h>
    using namespace std;
    #define setfin(x) memset(x,0,sizeof(x));
    #define setfax(x) memset(x,0x3f,sizeof(x));
    #define ld double
    ld x[20],y[20];
    int gk[20][20],t,n,dp[(1<<18)+5],judge[20],q;
    int calc(int d1,int d2)
    {
        ld x1=x[d1],y1=y[d1],x2=x[d2],y2=y[d2];
        ld tx=x1*x1*x2-x2*x2*x1,ty=y1*x2-y2*x1;
        ld a=ty/tx,b=(y1-a*x1*x1)/x1;
        if(a>=0) return 0;
        int res=0;
        judge[d1]=judge[d2]=1;
        for(int i=1;i<=n;i++)
        if(fabs(a*x[i]*x[i]+b*x[i]-y[i])<1e-7)res|=1<<(i-1),dp[res]=1;
        return res;
    }
    int main()
    {
        cin>>t;
        while(t--)
        {    
            setfin(judge);setfin(gk);setfax(dp);
            cin>>n>>q;
            for(int i=1;i<=n;i++){cin>>x[i]>>y[i];dp[1<<i-1]=1;}
            dp[0]=0;
            for(int i=1;i<=n;i++)for(int j=1;j<i;j++)gk[i][j]=calc(i,j);
            for(int i=0;i<1<<n;i++)for(int j=1;j<=n;j++)
            if(!(i&(1<<j-1)))
            {
                if(judge[j])for(int k=1;k<j;k++)
                if(!(i&(1<<k-1)))dp[i|gk[j][k]]=min(dp[i|gk[j][k]],dp[i]+1);    
                dp[i|(1<<j-1)]=min(dp[i|(1<<j-1)],dp[i]+1);
            }
            cout<<dp[(1<<n)-1]<<endl;
        }
    }
  • 相关阅读:
    mvn tomcat7:help的14个命令
    leetcode Next Permutation
    leetcode Permutation
    java HashMap
    单链表反转(递归和非递归) (Java)
    java数据类型
    Multiply Strings 大数相乘 java
    SQL中如何使用UPDATE语句进行联表更新(转)
    循环建立索引
    js 跨域访问
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11304080.html
Copyright © 2020-2023  润新知