A

题意:n(n<=20)个国家,每个国家之间有一些债务关系,总体为负债的国家会破产,破产国家的债务关系全部消除。问哪些国家可能成为最后一个唯一存在的国家。

题解:

对于每一个状态,面对若干个负债国,哪个国家先破产会影响最后的结果。

考虑到n<=20,可以状压。f[s]表示状态为s(0表示未破产,1表示已破产)是否存在。

转移方程:if(!s&(1<<i) && i在s状态下已破产)  f[s+(1<<i)] | = f[s];

O(2^n * n^2)//很慢www谁有更好的方法请留言

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<queue>
 6 using namespace std;
 7
 8 const int N=50;
 9 int n,a[N][N],ok[N],f[1100000];
10
11 int main()
12 {
13     //freopen("a.in","r",stdin);
14     int T;
15     scanf("%d",&T);
16     while(T--)
17     {
18         scanf("%d",&n);
19         for(int i=0;i<n;i++)
20             for(int j=0;j<n;j++)
21                 scanf("%d",&a[i][j]);
22
23         memset(f,0,sizeof(f));
24         f[0]=1;
25         for(int s=0;s<(1<<n);s++)
26         {
27             if(!f[s]) continue;
28             for(int i=0;i<n;i++)
29             {
30                 if(!(s&(1<<i)))
31                 {
32                     int sum=0;
33                     for(int j=0;j<n;j++)
34                         if(!(s&(1<<j))) sum-=a[i][j];
35                     if(sum<0) f[s|(1<<i)]=1;
36                 }
37             }
38         }
39         memset(ok,0,sizeof(ok));
40         int bk=0,now=0;
41         for(int i=0;i<n;i++)
42             if(f[((1<<n)-1)-(1<<i)]) ok[i]=1,bk++;
43         for(int i=0;i<n;i++)
44             if(ok[i])
45             {
46                 now++;
47                 if(now<bk) printf("%d ",i+1);
48                 else printf("%d\n",i+1);
49             }
50         if(!bk) printf("0\n");
51     }
52     return 0;
53 }

转载于:https://www.cnblogs.com/KonjakJuruo/p/9809493.html

[cerc2012][Gym100624A]20181013相关推荐

  1. [cerc2012][Gym100624B]20181013

    转载于:https://www.cnblogs.com/KonjakJuruo/p/9809637.html

  2. [cerc2012][Gym100624C]20181013

    题意:用元素符号表示字符串 题解:签到题 简单dp 难点在于把元素符号都改成小写qaq 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...

  3. BZOJ 4059: [Cerc2012]Non-boring sequences ( )

    要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断. 考虑一段序列 [ l , r ] , 假如我们找到了序 ...

  4. 论文阅读2018-10-13

    论文阅读2018-10-13 Addressing the minimum fleet problem in on-demand urban mobility 原文及翻译 METHODS Addres ...

  5. BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离

    传送门--BZOJCH 传送门--Vjudge 设\(f_i\)表示\(i\)到\(1\)号点的最短距离,\(g_i\)表示\(i\)到\(2\)号点的最短距离,\(s_i\)表示\(n+1\)号点到 ...

  6. datagrid显示mysql_WPF DataGrid显示MySQL查询信息,且可删除、修改、插入 (原发布 csdn 2018-10-13 20:07:28)...

    1.入行好几年了,工作中使用数据库几率很小(传统行业).借着十一假期回家机会,学习下数据库. 2.初次了解数据库相关知识,如果本文有误,还望告知. 3.本文主要目的,记录下wpf界面显示数据库信息,且 ...

  7. 20181013优秀的软件推荐专栏(每日一次)

    小马win7旗舰版64位激活工具 v10.1031 官方版是一款快速激活win7系统的工具软件,小马win7旗舰版激活工具工具采用一键式的激活方式,简单方便,内置5种品牌机oem进行选择激活,真正做到 ...

  8. 【跃迁之路】【725天】程序员高效学习方法论探索系列(实验阶段482-2019.2.15)...

    实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. 我将开源我的学习方 ...

  9. 【跃迁之路】【724天】程序员高效学习方法论探索系列(实验阶段481-2019.2.14)...

    实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. 我将开源我的学习方 ...

最新文章

  1. QT学习第8课:QT计算器界面实现
  2. 3D CNN框架结构各层计算
  3. 块级元素 Vs 内联元素
  4. 退役-兵巨臂锻炼计划
  5. IDEA+Hadoop运行TriangleCount程序
  6. 深入理解javascript原型和闭包(5)——instanceof
  7. Linux网络新技术基石 |​eBPF and XDP
  8. java中setStroke_Java调用setStroke()方法设置笔画属性的语法 原创
  9. java构造器 权限_一文搞懂Java的 构造方法 和 访问权限
  10. socket,ioctl获取ip
  11. FEMTransfer软件实现Patran/Nastran/Abaqus/Ansys/Sesam(Genie)/Workbench/Femap/盈建科/PKPM仿真分析软件的有限元模型相互转换导入
  12. Eclipse 英文翻译一点点
  13. blastn 输出结果每列啥意思_本地blast的详细用法
  14. 微信小程序识别字符串中的手机号,手机号高亮显示,并且可以点击这个手机号,拨打电话?
  15. PostgreSQL on duplicate update
  16. mcgscom口针脚定义_标准9针串口引脚定义
  17. 【GPT4】微软 GPT-4 测试报告(6)与人类的交互能力
  18. Git Github
  19. 这笔投资你算过吗?―写给二本院校的苦逼青年
  20. Ubuntu完全使用文档

热门文章

  1. php连接mysql原生_php链接mysql原生写法
  2. SQLAlchemy create_engine
  3. C++ newdelete
  4. date_range
  5. python特征数据类型及常用操作对比_更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!...
  6. 如何上传服务器文件大小,如何上传云服务器文件大小
  7. 求矩形的最小值c语言,C语言复习---矩形法求定积分函数
  8. 中小机房UPS电源及环境多方式在线监控和告警方案
  9. 负载均衡 > 用户指南 > 证书管理 > 证书要求
  10. Go 语言学习总结(4)—— 为什么说 Golang 是面向未来的语言?