zoukankan      html  css  js  c++  java
  • hdu 1557(权利指数)

    思路:

           **用二进制表示状态,暴力枚举!

           傻瓜式算法描述:

                                1.用二进制列举所有的状态

                                2.找票数之和大于总票数一半的状态

                                3.在这些状态中,若去掉某个小团体之后,不满足票数之和大于总票数一半,则为关键团体,加一。

    #include<stdio.h>
    #include<string.h>
    int data[21];
    int ans[21];
    int main()
    {
        int n,T;
        int i,j,sum,isum,tmp;
        float bsum;
        int m;//记录所有的状态
        scanf("%d",&T);
        while(T--)
        {
            sum=0;
            memset(ans,0,sizeof(ans));
            memset(data,0,sizeof(data));
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                scanf("%d",&data[i]);
                sum+=data[i];
            }
            bsum=(float)sum/2;
            m=(1<<n)-1;
            for(i=1;i<m+1;i++)//枚举状态1~~m
            {
                isum=0;
                for(j=0;j<n;j++)//二进制的为表示各团体的状态
                {
                    tmp=i>>j;
                    if(tmp&1)isum+=data[j];
                }
                if(isum>bsum)//printf("%d**",i);
                for(j=0;j<n;j++)
                {
                    tmp=i>>j;//一种状态下有两个团体有记录
                    if((tmp&1)&&isum-data[j]<=bsum)//改了好久,既然是忘了‘==’
                    ans[j]++;
                }
            }
            for(i=0;i<n-1;i++)
            printf("%d ",ans[i]);
            printf("%d\n",ans[n-1]);
    
        }
        return 0;
    }

     @@:此题用二进制存储状态!

  • 相关阅读:
    Android调用浏览器打开网址遇到的问题
    TexturePacker压缩png的命令
    碎碎念
    推荐几款API文档集合工具
    XCode打包脚本
    Android手机提示“未安装应用程序”
    移动环境下DNS解析失败后的优化方案
    7z压缩与解压命令
    Lua的文件操作
    IOS判断用户的网络类型(2/3/4G、wifi)
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3028694.html
Copyright © 2011-2022 走看看