题意:

N只FISH。每个回合会有一只FISH吃掉另一个FISH。直到池塘里只剩一只FISH。

给出aij:第i只FISH吃掉第J只FISH的概率。

问每一只FISH是最后存活者的概率。

Input

The first line contains integer n (1 ≤ n ≤ 18) — the amount of fish in the lake. Then there follow n lines with n real numbers each — matrix aaij (0 ≤ aij ≤ 1) — the probability that fish with index i eats up fish with index j. It's guaranteed that the main diagonal contains zeros only, and for other elements the following is true: aij = 1 - aji. All real numbers are given with not more than 6 characters after the decimal point.

思路:

仔细想想是个DP。N很小,状压DP。。。。

DP方程要推对。【*:写完方程试一两个SAMPLE】

看代码

代码:

int n;
double a[20][20];
double dp[(1<<18)+5];
int STATE[20][(1<<18)+5];
int STATE_n[20]; int calc(int x){
int res=0;
rep(i,0,n-1){
if((x&(1<<i))!=0){
++res;
}
}
ret res;
}
void makeState(){
mem(STATE_n,0);
int tot=((1<<n)-1);
rep(i,1,tot){
int t=calc(i);
STATE[t][++STATE_n[t]]=i;
}
} int main(){ cin>>n;
rep(i,0,n-1) rep(j,0,n-1) scanf("%lf",&a[i][j]); mem(dp,0);
dp[(1<<n)-1]=1.0;
makeState(); rep2(k,n-1,1){
int s=-1, _s=-1;
rep(i,1,STATE_n[k]){ //枚举nowState
s=STATE[k][i];
rep(j,0,n-1){
if((s&(1<<j))==0){
_s=s|(1<<j);
rep(t,0,n-1){
if((s&(1<<t))!=0){
dp[s]+=(2*dp[_s]*a[t][j]/(k*(k+1)));
}
}
}
}
}
}
printf("%lf",dp[1]);
rep(i,1,n-1){
printf(" %lf",dp[1<<i]);
}
cout<<endl; ret 0;
}

cf16E Fish(状压DP)的更多相关文章

  1. CF16E Fish(状压+期望dp)

    [传送门[(https://www.luogu.org/problemnew/show/CF16E) 解题思路 比较简单的状压+期望.设\(f[S]\)表示\(S\)这个状态的期望,转移时挑两条活着的 ...

  2. Codeforces Beta Round #16 E. Fish (状压dp)(概率dp)

    Codeforces Beta Round #16 (Div. 2 Only) E. Fish 题目链接:## 点击打开链接 题意: 有 \(n\) 条鱼,每两条鱼相遇都会有其中一只吃掉对方,现在给你 ...

  3. 「算法笔记」状压 DP

    一.关于状压 dp 为了规避不确定性,我们将需要枚举的东西放入状态.当不确定性太多的时候,我们就需要将它们压进较少的维数内. 常见的状态: 天生二进制(开关.选与不选.是否出现--) 爆搜出状态,给它 ...

  4. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  5. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  6. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  7. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  8. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  9. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

随机推荐

  1. 动态规划精讲(一)LC最长公共子序列

    P1439 [模板]最长公共子序列 题目描述 给出1,2,-,n 的两个排列P1​ 和P2​ ,求它们的最长公共子序列. 输入格式 第一行是一个数 n. 接下来两行,每行为 n 个数,为自然数 1,2 ...

  2. Docker系列(18)- 具名挂载和匿名挂载

    容器数据卷挂载方式 容器的数据卷可以看成就是容器的挂载方式:一个宿主机有多个容器,多个容器挂载方式不同,因此宿主机就有多个卷 每一个挂载方式在宿主机上都有一个名称,即卷名 宿主机如何查看这些卷,对使用 ...

  3. spring入门2-aop和集成测试

    1.AOP开发 1.1.简述 作用:面向切面编程:在程序运行期间,在不修改源码的情况下对代码进行增强 优势:减少代码重复,提高开发效率,便于维护 底层:动态代理实现(jdk动态代理,cglib动态代理 ...

  4. python在iis获取header

    #print os.environ['QUERY_STRING']#print os.environ['HTTP_HOST'] #print '---------------------------- ...

  5. springweb项目自定义拦截器修改请求报文头

    面向切面,法力无边,任何脏活累活,都可以从干干净净整齐划一的业务代码中抽出来,无非就是加一层,项目里两个步骤间可以被分层的设计渗透成筛子. 举个例子: 最近我们对接某银行接口,我们的web服务都是标准 ...

  6. Visaul Studio Code中提示 vue:无法加载vue.ps1,未对vue.ps1进行数字签名

    Visaul Studio Code错误提示 错误如图: 解决办法 首先以管理员身份打开windows PowShell终端. 输入下面命令,如提示选择Y即可. get-help set-execut ...

  7. HashMap的tableSizeFor解析

    我们都知道,对于HashMap来说,数组的容量为2的倍数,但是我们可以在创建map的时候传入一个数组的大小 此时,这个初始化数组大小会传给一个双参的构造器 1. 创建HashMap public st ...

  8. 提问式复习:图文回顾 redo log 相关知识

    原文链接:提问式复习:图文回顾 redo log 相关知识 1.如何提升 redo日志 的写性能? 为了保证 redo日志 不丢失,会在磁盘中开辟一块空间将日志保存起来.但是这样会有一个问题,磁盘的读 ...

  9. UVa/数组与字符串习题集

    UVa-272. Description: TEX is a typesetting language developed by Donald Knuth. It takes source text ...

  10. 初探区块链数字加密资产标准ERC721

    ERC721介绍 数字加密货币大致可以分为原生币(coin)和代币(token)两大类.前者如BTC.ETH等,拥有自己的区块链.后者如Tether.TRON.ONT等,依附于现有的区块链.市场上流通 ...