QiQi and Bonds
只有链接:http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23685
题意:现在有n个QiQi和n个任务,告诉了每个QiQi能够成功完成这n个任务的概率,每个QiQi只能完成一种任务,问你如何安排任务使得所有的任务被完成的概率最大。
题解:很明显的状压Dp啊。之前没有独立的打过这种DP,比赛的时候打了一发,结果WA,第二天才知道自己枚举的时候状态少枚举了。结果复习了一下状压dp。然后打了一发,结果T了。然后就想优化。发现,对于第i行来说,枚举i-1行的时候,这时候室友优化的,因为前i-1行所放的东西的个数必须是i-1个,结果改了,加了一个判断,结果还T了,想了想,其实还是可以优化的,就是判断的时候可以事先把每一种状态的1的个数处理处理,那么判断的时候就可以O(1)的了,否则会每次都会计算一次。这样就过了。一开始还不知道怎么枚举上一层的状态,结果是把总的每一种都枚举一遍。不错不错,继续努力。
最近看到一句话分享给大家:只有一条路不能选择---那就是放弃的的路;只有一条路不能拒绝---那就是成长的路!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
double dp[][(<<)];
double a[][];
int c[<<];
int n;
int counts(int x){
int ans=;
while(x){
ans+=(x&);
x/=;
}
return ans;
}
void solve(){
memset(c,,sizeof(c));
for(int i=;i<(<<n);i++){
c[i]=counts(i);
}
}
int main(){
while(~scanf("%d",&n)){
memset(dp,,sizeof(dp));
memset(a,,sizeof(a));
solve();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%lf",&a[i][j]); for(int i=;i<=n;i++)
dp[][<<(i-)]=a[][i]; for(int i=;i<=n;i++){
memset(dp[i&],,sizeof(dp[i&]));
for(int j=;j<(<<n);j++){
if(c[j]!=i-)continue;
for(int k=;k<=n;k++){
int temp=(<<(k-));
if(!(temp&j)){
dp[i&][temp+j]=max(dp[i&][temp+j],dp[(i-)&][j]*a[i][k]);
}
}
}
}
double maxn=;
for(int i=;i<(<<n);i++){
maxn=max(maxn,dp[n&][i]);
}
for(int i=;i<n;i++){
maxn/=100.0;
}
printf("%.6lf\n",maxn);
}
}
QiQi and Bonds的更多相关文章
- HDU 5765 Bonds 巧妙状压暴力
题意:给一个20个点无向连通图,求每条边被多少个极小割集包括 分析:极小割集是边的集合,很显然可以知道,极小割集恰好吧原图分成两部分(这个如果不明白可以用反证法) 然后就是奉上官方题解:http:// ...
- HDU5765 Bonds 最小割极
http://acm.hdu.edu.cn/showproblem.php?pid=5765 题意:无向连通图,问每条边在几个最小割极上 思路:用位压形式,表示边的关系.g[1<<i]=1 ...
- QiQi and Symmerty
http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23772 题意:给出一个01串,问有多少个子 ...
- HDU 5765 Bonds(状压DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5765 [题目大意] 给出一张图,求每条边在所有边割集中出现的次数. [题解] 利用状压DP,计算不 ...
- HDU 5765 Bonds
比赛时候想了好久,不会.看了官方题解才会...... Bond是极小割边集合,去掉一个Bond之后,只会将原图分成两个连通块. 假设某些点构成的集合为 s(点集中的点进行状压后得到的一个十进制数),那 ...
- [HDU5765]Bonds
题面 题意 给出一张\(n\)点\(m\)边无向连通图,求每条边出现在多少个割集中. \(n\le20,m\le\frac{n(n-1)}{2}\) sol 所谓割集,就是指把\(n\)个点分成两个集 ...
- HDU.5765.Bonds(DP 高维前缀和)
题目链接 \(Description\) 给定一张\(n\)个点\(m\)条边的无向图.定义割集\(E\)为去掉\(E\)后使得图不连通的边集.定义一个bond为一个极小割集(即bond中边的任意一个 ...
- bonds
Linux--多网卡的7种Bond模式 http://www.cnblogs.com/lcword/p/5914089.html 七种网卡绑定模式详解: http://blog.csdn.net/w ...
- Why did I have a recovery trip
For more than a decade, I felt most at ease living out of a suitcase, never quite sure where I might ...
随机推荐
- Mysql新建用户和数据库并授权
测试环境:Centos 6.3和Mysql 5.3 一.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into my ...
- (转载)Java 1.7的新特性
网上找了一下,整理了贴出来. 下面是Java 1.7 里新出现的功能的一些用法例子: 对集合的支持 摒弃了 Java 集合接口的实现类,如: ArrayList . HashSet 和 HashMap ...
- 使用ListView 时,遇到了 Your content must have a ListView whose id attribute is 'android.R.id.list' 错误
今天在开发Android小应用的时候,使用到了ListView,在使用自己创建的listview风格的时候,就出现了如标题的错误提示信息,这个就让我纳闷了,以前也不会出现这个问题啊,而且也可以运行,赶 ...
- Log4j(1.2.17) - hello world
1. Maven 依赖 <dependencies> <dependency> <groupId>log4j</groupId> <artifac ...
- oracle中drop、delete和truncate的区别
oracle中drop.delete和truncate的区别 oracle中可以使用drop.delete和truncate三个命令来删除数据库中的表,网上有许多文章和教程专门讲解了它们之间的异同,我 ...
- 多线程lock(instance)中instance的选择.
如我的提问:http://bbs.csdn.net/topics/390496351?page=1#post-394837834 拥有类原子功能的类: class ShareState { //原子功 ...
- IE8下ckeditor无法正常使用,提示"例外被抛出且未被接住"的解决办法
<script language="javascript" src="ckeditor/ckeditor.js"></script> & ...
- Objective-C的对象模型 http://foredoomed.org/blog/2014/02/24/object-modeling-of-objective-c/
Objective-C是一门面向对象,并且在C的基础上加入了Smalltalk式的消息机制而形成的编程语言,它主要被苹果公司用于开发Mac OS X和iOS操作系统.既然Objective-C是面向对 ...
- 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...
- Spring+AOP+Log4j 用注解的方式记录指定某个方法的日志
一.spring aop execution表达式说明 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义 ...