BZOJ3150: [Ctsc2013]猴子
这题好神啊..好神啊..
首先得到简单的DP方程:
$f_{\{ i \}}=\frac{\sum_{i \ne j} f_ {\{ i,j \}} \times P_{(i,j)}}{N-1}$
然后存在这样一个关系:$f_{A \cup B}=f_{A}+f_{B}$。
所以上面那个DP方程就可以很愉悦的改为:
$f_{\{ i \}}=\frac{\sum_{i \ne j} (f_ {\{ i\}} +f_{\{ j \} } )\times P_{(i,j)}}{N-1}$
因为存在相互依赖关系,用高斯消元求解。
然后因为最后为了防止出现所有元素都为$0$的解,需要加上$\sum f_i =1$这一个限制条件。
//BZOJ 3150
//by Cydiater
//2017.1.22
#include <iostream>
#include <queue>
#include <map>
#include <cstdio>
#include <cstring>
#include <string>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <bitset>
#include <set>
#include <vector>
using namespace std;
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
#define cmax(a,b) a=max(a,b)
#define cmin(a,b) a=min(a,b)
#define db double
const int MAXN=1005;
db M[MAXN][MAXN],P[MAXN][MAXN];
int N,MM;
char s[MAXN];
namespace solution{
void Prepare(){
scanf("%d%d",&N,&MM);
up(i,1,N)up(j,1,N)scanf("%lf",&P[i][j]);
up(i,1,N-1){
M[i][i]=1-N;
up(j,1,N)if(i!=j){
M[i][j]+=P[i][j];
M[i][i]+=P[i][j];
}
}
up(i,1,N+1)M[N][i]=1;
}
void Guass(){
int waited;
up(i,1,N){
waited=i;
up(j,i+1,N)if(abs(M[j][i])>abs(M[waited][i]))waited=j;
if(i!=waited)up(j,i,N+1)swap(M[waited][j],M[i][j]);
up(j,i+1,N){
db f=M[j][i]/M[i][i];
up(k,i,N+1)M[j][k]-=f*M[i][k];
}
}
down(i,N,1){
up(j,i+1,N)M[i][N+1]-=M[i][j]*M[j][N+1];
M[i][N+1]/=M[i][i];
}
}
void Solve(){
Guass();
while(MM--){
scanf("%s",s);
int len=strlen(s);
db ans=0;
up(i,0,len)if(s[i]=='1')ans+=M[i+1][N+1];
printf("%.8lf\n",ans);
}
}
}
int main(){
//freopen("input.in","r",stdin);
using namespace solution;
Prepare();
Solve();
return 0;
}
BZOJ3150: [Ctsc2013]猴子的更多相关文章
- [BZOJ3150][Ctsc2013]猴子 期望dp+高斯消元
3150: [Ctsc2013]猴子 Time Limit: 20 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 163 Solved: 10 ...
- BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元
一堆牌的期望等于每张牌的期望值和. 考虑三个人的游戏即可得到. 然后每张牌遇到另外一张的概率相同,然后就可以列方程求解了. #include <cmath> #include <cs ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 《饥荒游戏》SW BUG 刷猴子 & 刷淘气值 办法
简介 该办法利用刷猴子的方式,通过杀猴子获取淘气值,从而刷出坎普斯,继而刷坎普斯背包 物品准备 灭火器x1 箱子x1 逗猴球x1 猴窝xN 帽贝岩x2 避雷针x1 操作步骤 1.灭火器建造在2个帽贝岩 ...
- c语言经典算法——猴子偷桃问题
题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...
- 网络神器Greasemonkey(油猴子)使用方法简介+脚本分享【转载】
推荐下,觉得这个方法有用, 今天艾薇百科来介绍一下功能强大的Greasemonkey,俗称"油猴子",Greasemonkey可以自由定制网页,实现你想要的各种功能.堪称" ...
- sicily 猴子选大王
题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...
- 踩个猴尾不容易啊 Canvas画个猴子
踩个猴尾不容易啊 Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- BZOJ2429[HAOI2006]聪明的猴子[最小生成树 kruskal]
2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 896 Solved: 575[Submit][Statu ...
随机推荐
- 【BZOJ2973】石头游戏 矩阵乘法
[BZOJ2973]石头游戏 Description 石头游戏的规则是这样的. 石头游戏在一个n行m列的方格阵上进行.每个格子对应了一个编号在0~9之间的操作序列. 操作序列是一个长度不超过6且循环执 ...
- 树形结构数据存储方案的选择和java list转tree
树形结构数据存储方案 Adjacency List:每一条记录存parent_idPath Enumerations:每一条记录存整个tree path经过的node枚举Nested Sets:每一条 ...
- 面试之二:Redis是单线程还是多线程?以及处理模型。
Redis是单线程还是多线程?以及处理模型. 线程:单线程 处理模型:参考书<Redis 设计与实现>P151-152 
1.安装RODBC包 install.packages("RODBC") 2.配置ODBC 首先查看是否有mysqlODBC5.1Driver 如果没有mysqlODBC5.1D ...
- How an event flows in a pipeline Netty Internal I/O Threads (Transport Implementation)
C:\Users\sas\.m2\repository\io\netty\netty-all\4.1.30.Final\netty-all-4.1.30.Final-sources.jar!\io\n ...
- xpath-grab english name
from scrapy.spider import Spider from scrapy.crawler import CrawlerProcess import pymysql conn = pym ...
- datetime 模块详解 -- 基本的日期和时间类型
转自:https://www.cnblogs.com/fclbky/articles/4098204.html datetime 模块提供了各种类用于操作日期和时间,该模块侧重于高效率的格式化输出 在 ...
- Java技术大牛需要学习的25个技能
你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是class.object.interaction以及statediagrams. ...
- python - 用户交互/数据类型/格式化输出/运算符/流程控制单双多分支
python:用户交互: 等用户输入,做反应: username=input("username:")password=input("password:")pr ...