hdu 4711 Weather概率dp
http://acm.hdu.edu.cn/showproblem.php?pid=4711
真的是坑吐血了,wa了5次 最后实在无语 把long long double 改成long double 就过了
#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <cstdio>
#include <cctype>
#include <string>
#include <cstring>
#include <sstream>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define PI 3.1415926535897932384626433832795
using namespace std;
const int N = 110;
const double INF = 1e50;
const double EPS = 1e-14; int T, n, m, w;
int ord[1010];
double pm[N][N], pw[N][N];
long double dp[1010][N];
int fa[1010][N]; int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &n, &m, &w);
for(int i = 0; i < n; ++i) scanf("%d", ord + i);
for(int i = 0; i < m; ++i)
for(int j = 0; j < m; ++j)
{
scanf("%lf", &pm[i][j]);
if(pm[i][j] > EPS) pm[i][j] = log(pm[i][j]);
else pm[i][j] = -INF;
}
for(int i = 0; i < m; ++i)
for(int j = 0; j < w; ++j)
{
scanf("%lf", &pw[i][j]);
if(pw[i][j] > EPS) pw[i][j] = log(pw[i][j]);
else pw[i][j] = -INF;
} for(int i = 0; i < m; ++i) dp[n-1][i] = pw[i][ord[n-1]];
for(int i = n - 2; i >= 0; --i)
{
for(int j = 0; j < m; ++j) dp[i][j] = -INF;
for(int j = 0; j < m; ++j)
{
for(int k = 0; k < m; ++k)
{
if(dp[i][j] < dp[i+1][k] + pm[j][k] + pw[j][ord[i]])
{
dp[i][j] = dp[i+1][k] + pm[j][k] + pw[j][ord[i]];
fa[i][j] = k;
}
}
}
} int pos = 0;
long double best = -INF;
for(int i = 0; i < m; ++i)
if(best < dp[0][i] + pm[0][i])
{
best = dp[0][i] + pm[0][i], pos = i;
}
printf("%d", pos);
for(int i = 0; i < n-1; ++i)
printf(" %d", pos = fa[i][pos]);
printf("\n");
}
return 0;
}
hdu 4711 Weather概率dp的更多相关文章
- HDU 3853LOOPS(简单概率DP)
HDU 3853 LOOPS 题目大意是说人现在在1,1,需要走到N,N,每次有p1的可能在元位置不变,p2的可能走到右边一格,有p3的可能走到下面一格,问从起点走到终点的期望值 这是弱菜做的第 ...
- HDU - 1099 - Lottery - 概率dp
http://acm.hdu.edu.cn/showproblem.php?pid=1099 最最简单的概率dp,完全是等概率转移. 设dp[i]为已有i张票,还需要抽几次才能集齐的期望. 那么dp[ ...
- HDU 4405 【概率dp】
题意: 飞行棋,从0出发要求到n或者大于n的步数的期望.每一步可以投一下筛子,前进相应的步数,筛子是常见的6面筛子. 但是有些地方可以从a飞到大于a的b,并且保证每个a只能对应一个b,而且可以连续飞, ...
- HDU 4576 Robot(概率dp)
题目 /*********************复制来的大致题意********************** 有N个数字,M个操作, 区间L, R. 然后问经过M个操作后落在[L, R]的概率. * ...
- HDU 4599 Dice (概率DP+数学+快速幂)
题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n ...
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...
- HDU 3853 期望概率DP
期望概率DP简单题 从[1,1]点走到[r,c]点,每走一步的代价为2 给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] , 右移:[x][y ...
- HDU 3366 Passage (概率DP)
题意:T组测试数据,一个人困在了城堡中,有n个通道,m百万money ,每个通道能直接逃出去的概率为 P[i] ,遇到士兵的概率为 q[i], 遇到士兵得给1百万money,否则会被杀掉,还有 1-p ...
随机推荐
- Zendframework连接两个或多个数据库的实现
配置文件 <db> <adapter>PDO_MSSQL</adapter> <config> <host>localhost</ho ...
- Linux系统编程(12)——shell基础
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个 ...
- H.264 RTP 封包格式
H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: +---------------+ |0|1|2|3|4|5|6|7 ...
- MFC修改任务栏图标及程序运行exe图标
修改左上角的图标和任务栏里图标 在对话框构造函数中 1 CTestDlg::CTestDlg(CWnd* pParent )2 : CDialog(CTestDlg::IDD, pParent)3 { ...
- UVA_Rotation Game<旋转游戏> UVA 1343
The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The ...
- dom4j解析XML的CURD操作
在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...
- 将json格式日期(毫秒数)转成日常日期格式和日常格式时间对比
第一:是把生成的Json格式的时间转换,注意要看清楚时间的格式 function (cellval) { var date = new Date(parseInt(cellval.replace(&q ...
- C#获取mac
验证计算机MAC地址进行软件授权是一种通用的方法,C#可以轻松获取计算机的MAC地址,本文采用实际的源代码讲述了两种获取网卡的方式,第一种 方法使用ManagementClass类,只能获取本机的计算 ...
- Jq超链接提示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JQ动画,背景透明度
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...