给出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. Linq→join中指定多个条件

    还是习惯先撸一段SQL * FROM User_Pic P AND P.Guid = R.UserPicGuid ORDER BY PicSize DESC 然后发现Linq中的join不能多条件.. ...

  2. bootstrap模版

    http://demo.cssmoban.com/cssthemes3/cpts_274_nz/forms.html

  3. 【活动】不用买书,不用花钱,可以免费看HTML5入门连载了

    清华大学出版社推出的<HTML 5网页开发实例详解>适合HTML 5开发初学者和前端开发工程师.本书一经上市,就获得了读者的一致好评,为感谢读者,推出本书的连载活动.   本书术新颖.与时 ...

  4. ytkah网站建设解决方案 大中小微企业营销利器

    为大中小微企业提供网站设计制作优化服务,PC移动微网站三合一,抢占市场先机.读万卷书不如走万里路,走万里路不如阅人无数.说再多空洞无物不如上案例几簇 优秀案例展示,上市公司人人网旗下游戏<天书奇 ...

  5. hdu.1010.Tempter of the Bone(dfs+奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  6. 大数据之pig安装

    大数据之pig安装 1.下载 pig download 2. 解压安装 mapreduce模式安装: 1:设置HADOOP_HOME,如果pig所在节点不是集群中的节点,那就需要把集群中使用的hado ...

  7. Mysql InnoDB行锁实现方式

    Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...

  8. C#爬虫之~苏飞万能框架使用教程

    苏飞的框架帮助类,很多人应该都知道,不知道可以百度,此处直接说用法. //引入命名空间 using CsharpHttpHelper; //创建Httphelper对象 HttpHelper http ...

  9. Android 网络请求框架android-async-http问题

    今天通过接口请求服务器的一些app数据,发现一个很奇怪的问题,请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一 ...

  10. JAVA多线程基础知识(一)

    一. 基础知识 要了解多线程首先要知道一些必要的概念,如进程,线程等等.开发多线程的程序有利于充分的利用系统资源(CPU资源),使你的程序执行的更快,响应更及时. 1. 进程,一般是指程序或者任务的执 ...