给出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)的更多相关文章

  1. HDU 4865 Peter's Hobby --概率DP

    题意:第i天的天气会一定概率地影响第i+1天的天气,也会一定概率地影响这一天的湿度.概率在表中给出.给出n天的湿度,推测概率最大的这n天的天气. 分析:这是引自机器学习中隐马尔科夫模型的入门模型,其实 ...

  2. 2014多校第一场 E 题 || HDU 4865 Peter's Hobby (DP)

    题目链接 题意 : 给你两个表格,第一个表格是三种天气下出现四种湿度的可能性.第二个表格是,昨天出现的三种天气下,今天出现三种天气的可能性.然后给你这几天的湿度,告诉你第一天出现三种天气的可能性,让你 ...

  3. HDU 4865 Peter's Hobby(2014 多校联合第一场 E)(概率dp)

    题意:已知昨天天气与今天天气状况的概率关系(wePro),和今天天气状态和叶子湿度的概率关系(lePro)第一天为sunny 概率为 0.63,cloudy 概率 0.17,rainny 概率 0.2 ...

  4. HDU 4865 Peter's Hobby

    $dp$. 这题的本质和求一个有向无环图的最长路径长度的路径是一样的. $dp[i][j]$表示到第$i$天,湿度为$a[i]$,是第$j$种天气的最大概率.记录一下最大概率是$i-1$天哪一种天气推 ...

  5. hdu 4865 Peter&#39;s Hobby (隐马尔可夫模型 dp)

    Peter's Hobby Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. hdu 4865 Peter&#39;s Hobby(2014 多校联合第一场 E)

    Peter's Hobby Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  7. hdu 4865 Peter&#39;s Hobby

    Peter's Hobby Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. HDU 5781 ATM Mechine (概率DP)

    ATM Mechine 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5781 Description Alice is going to take ...

  9. HDU 4050 wolf5x(动态规划-概率DP)

    wolf5x Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. High Frequency Trading (整理中...)

    什么是高频交易系统 1 交易指令完全是由电脑发送,对市场数据的响应延时在微秒级2 系统有专用的软硬件组成,研发时需要大量的计算机专家级的工作3 系统的硬件需要放在离交易所主机很近的位置,所谓co-lo ...

  2. HITtrainning20140417题解

    题目列表:     ID Origin Title 10 / 15 Problem A FZU 2152 文件系统   0 / 16 Problem B FZU 2153 A simple geome ...

  3. js反序列化时间

    var time = "/Date(1279270720000+0800)/"; var tme1 = ChangeDateFormat(time); alert(tme1); J ...

  4. Tomcat 6 —— Realm域管理

    本篇来源于官方文档,但不仅仅是翻译,其中不乏网上搜索的资料与自己的理解. 如有错误,请予指正. 什么是Realm 首先说一下什么是Realm,可以把它理解成“域”,也可以理解成“组”,因为它类似 类U ...

  5. 初探Ajax

    1.什么是Ajax Ajax是Asynchronous JavaScript and XML的缩写,这一技术能从服务器请求额外数据而无需卸载页面.传统的HTTP请求流程大概是这样的,浏览器向服务器发送 ...

  6. Sturts2的action不执行任何方法的原因

    今天用<s:url action="xxx">调用action的时候出现了一个“异常”, action里的任何方法都没有执行,直接返回success,而且没有任何报错. ...

  7. MAVEN for mac 安装

    http://blog.csdn.net/anialy/article/details/22217937 下载 maven  http://mirrors.hust.edu.cn/apache/mav ...

  8. String、StringBuffer、StringBuilder的不同使用场景

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  9. BZOJ2002——[Hnoi2010]Bounce 弹飞绵羊

    1.题目大意:就是给一个动态的森林求size域 2.分析: 这个就是一个动态树问题,对于每一个位置i有i+ki这个父亲, 于是这就是一个森林了,然后对于每一个修改直接lct维护就好,询问就是i到最外面 ...

  10. Android学习笔记(二十二)——短信接收与发送

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 当手机接收到一条短信的时候, 系统会发出一条值为 android.provider.Telephony.SMS ...