HDU 4865 Peter's Hobby(概率、dp、log)
给出2个影响矩阵,一个是当天天气对湿度的影响,一个是前一天天气对当天天气的影响。
即在晴天(阴天、雨天)发生Dry(Dryish、Damp、Soggy)的概率,以及前一天晴天(阴天、雨天)而今天发生晴天(阴天、雨天)的概率。
其中第一天的晴天阴天雨天概率为0.63,0.17,0.20
输入n天的湿度情况,输出最有可能的n天的天气。
用dp[i][j]表示第i天为j天气的概率,用pre[i][j]表示它的前驱。
注意由于概率相乘次数过多,要用log放大。。不然会接近0、精度不够、误差大
dp[i][j] = max{dp[i-1][k] + w_w[k][j] + w_h[j][h[i]]},当然这些w_w, w_h要全部都log
w_w[k][j]表示昨天k天气今天j天气的概率,w_h[j][h[i]]表示今天j天气发生h[i]湿度的概率
这样出来的dp[i][j]就可以表示第i天为j天气,且湿度为h[i] 。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std; double aa[][]={
0.6, 0.2, 0.15, 0.05,
0.25, 0.3, 0.2, 0.25,
0.05, 0.10, 0.35, 0.50
};
double bb[][]={
0.5, 0.375, 0.125,
0.25, 0.125, 0.625,
0.25, 0.375, 0.375
};
int main(){
for(int i=;i<;++i)for(int j=;j<;++j) aa[i][j] = log(aa[i][j]);
for(int i=;i<;++i)for(int j=;j<;++j) bb[i][j] = log(bb[i][j]);
int t,n,lea[],ca=;
double dp[][];
int pre[][];
int ans[];
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=;i<n;++i){
char s[];
scanf("%s",s);
if(strcmp(s,"Dry")==) lea[i]=;
else if(strcmp(s,"Dryish")==) lea[i]=;
else if(strcmp(s,"Damp")==) lea[i]=;
else lea[i]=;
}
dp[][] = log(0.63)+aa[][lea[]];
dp[][] = log(0.17)+aa[][lea[]];
dp[][] = log(0.20)+aa[][lea[]];
for(int i=;i<n;++i){
for(int j=;j<;++j){
double ma = -1e8; int idx;
for(int k=;k<;++k){
if(dp[i-][k]+bb[k][j]+aa[j][lea[i]] >ma){
ma = dp[i-][k]+bb[k][j]+aa[j][lea[i]];
idx = k;
}
}
dp[i][j] = ma, pre[i][j]=idx;
}
}
double ma=-1e8;int idx;
for(int j=;j<;++j)if(dp[n-][j]>ma){ma=dp[n-][j];idx=j;}
ans[n-]=idx;
for(int i=n-;i;--i){
ans[i-] = pre[i][idx];
idx = pre[i][idx];
}
printf("Case #%d:\n",++ca);
for(int i=;i<n;++i){
if(ans[i]==)puts("Sunny");
else if(ans[i]==)puts("Cloudy");
else puts("Rainy");
}
}
return ;
}
隐马尔可夫模型http://blog.csdn.net/likelet/article/details/7056068
HDU 4865 Peter's Hobby(概率、dp、log)的更多相关文章
- HDU 4865 Peter's Hobby --概率DP
题意:第i天的天气会一定概率地影响第i+1天的天气,也会一定概率地影响这一天的湿度.概率在表中给出.给出n天的湿度,推测概率最大的这n天的天气. 分析:这是引自机器学习中隐马尔科夫模型的入门模型,其实 ...
- 2014多校第一场 E 题 || HDU 4865 Peter's Hobby (DP)
题目链接 题意 : 给你两个表格,第一个表格是三种天气下出现四种湿度的可能性.第二个表格是,昨天出现的三种天气下,今天出现三种天气的可能性.然后给你这几天的湿度,告诉你第一天出现三种天气的可能性,让你 ...
- HDU 4865 Peter's Hobby(2014 多校联合第一场 E)(概率dp)
题意:已知昨天天气与今天天气状况的概率关系(wePro),和今天天气状态和叶子湿度的概率关系(lePro)第一天为sunny 概率为 0.63,cloudy 概率 0.17,rainny 概率 0.2 ...
- HDU 4865 Peter's Hobby
$dp$. 这题的本质和求一个有向无环图的最长路径长度的路径是一样的. $dp[i][j]$表示到第$i$天,湿度为$a[i]$,是第$j$种天气的最大概率.记录一下最大概率是$i-1$天哪一种天气推 ...
- hdu 4865 Peter's Hobby (隐马尔可夫模型 dp)
Peter's Hobby Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 4865 Peter's Hobby(2014 多校联合第一场 E)
Peter's Hobby Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 4865 Peter's Hobby
Peter's Hobby Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- HDU 5781 ATM Mechine (概率DP)
ATM Mechine 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5781 Description Alice is going to take ...
- HDU 4050 wolf5x(动态规划-概率DP)
wolf5x Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- Linux下,telnet命令如何退出
测试连接本地的memcached telnet 链接后是这样的: wangkongming@Vostro ~ $ telnet Trying 127.0.0.1... Connected to 127 ...
- 查看mysql数据库的数据引擎
1, SHOW VARIABLES LIKE 'storage_engine'; 2,show table status from 数据库库名 where name='表名',例: mysql> ...
- solr6.1-----mysql 数据导入-查询
此部分一定要细心,lz 中间错了一个细节,调了好长时间(汗).请严格按照步骤操作 新建core 步骤1: 在webapps中solrhome下新建一个文件夹名字叫做collection1(名字不固定, ...
- 深入分析,理解jQuery.Deferred源码
前言: 如果你对jQuery.Callback回调对象不了解,或者只掌握其方法,但是没有通过阅读源码理解,可以先阅读 前一章jQuery.Callbacks源码解读二,因为只有完全理解jQuery.C ...
- SQL--表分区
use Test --.创建数据库文件组>>alter database <数据库名> add filegroup <文件组名> ALTER DATABASE TE ...
- etcd
https://github.com/silenceper/dcmp http://studygolang.com/topics/1866
- sharepoint learning resourse
开始学习sharepoint后,我决定将我的个人电脑上也部署一套开发系统,这样回家也可以学习些东西.因此写点关于部署sharepoint需要资源的文字供初学sharepoint的童鞋一起进步,以避免各 ...
- UESTC 1852 Traveling Cellsperson
找规律水题... Traveling Cellsperson Time Limit: 1000ms Memory Limit: 65535KB This problem will be judged ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- VC++6.0一些常见问题解决方法(打开多个窗口、行号、添加文件无响应、更改.exe图标及名称等等)
背景: 最近使用VC++6.0做一个界面,供测试CAN通信使用.由于客户希望我们提供简单方便的函数接口让其最快速使用CAN,DLL(动态链接库)是不二之选.做DLL需要两个VC窗口进行测试才方便.可是 ...