HDU 4865 Peter's Hobby
来源:互联网 发布:辩证看待人工智能 编辑:程序博客网 时间:2024/05/20 10:23
题意:叶子的干湿程度会受到天气的影响。而昨天的天气会影响到今天的天气情况。给出干湿程度和天气影响的概率矩阵和前后天气影响的概率矩阵。
给出连续几天叶子的观测情况,求这几天最可能的天气序列。
思路:隐式马尔科夫模型。DP。
题中已经给出了今天的概率,我们可以通过两个矩阵来算出之后的每个最大概率以及该天气是由前一天的哪个天气的转移过来的。
最后,先判断最后一天的天气情况,然后回溯即可
代码如下:
#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int MAX = 55;const int INF = 0x3f3f3f3f;double t1[3][4] = {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 t2[3][3] = {0.5,0.375,0.125, 0.25,0.125,0.625, 0.26,0.375,0.375};// 0:sunny,1:cloudy,2:rainychar weather[3][8] = {"Sunny","Cloudy","Rainy"};double f[MAX][3];int pre[MAX][3];int path[MAX];int trans(char *s){ if(strcmp(s,"Dry")==0) return 0; if(strcmp(s,"Dryish") == 0) return 1; if(strcmp(s,"Damp") == 0) return 2; if(strcmp(s,"Soggy") == 0) return 3;}int main(void){ //freopen("input.txt","r",stdin); int T; scanf("%d", &T); for(int Case = 1; Case <= T; ++Case) { printf("Case #%d:\n",Case); int n; scanf("%d", &n); f[1][0] = 0.63; f[1][1] = 0.17; f[1][2] = 0.2; for(int i = 1; i <= n; ++i){ char str[20]; scanf("%s",str); int k = trans(str); for(int j = 0; j < 3; ++j){ if(i == 1) f[i][j] = log(f[i][j]) +log(t1[j][k]); else { f[i][j] = -INF; for(int v = 0 ;v < 3; ++v){ double tmp =f[i-1][v] + log(t2[v][j]) + log(t1[j][k]); if( tmp > f[i][j]){ f[i][j] = tmp; pre[i][j] = v; } } } } } int next = 0; for(int i = 1; i < 3; ++i) if(f[n][i] > f[n][next]) next = i; for(int i = n; i >= 1; next = pre[i][next],i--) //printf("%s\n",weather[next]); path[i] = next; for(int i = 1; i<= n; ++i) printf("%s\n",weather[path[i]]); } return 0;}
0 0
- hdu 4865 Peter's Hobby
- HDU 4865 Peter's Hobby
- hdu 4865 Peter's Hobby
- hdu 4865 Peter's Hobby(DP)
- HDOJ 4865 Peter's Hobby
- HDU 4865 Peter's Hobby(输出路径的dp)
- hdu 4865 Peter's Hobby(概率dp)
- hdu 4865 Peter's Hobby (隐马尔可夫模型 dp)
- HDU 4865 Peter's Hobby --概率DP
- hdu多校联合Peter's Hobby
- [HDOJ 4865] Peter's Hobby [概率DP]
- Peter's Hobby
- hdu4865 Peter's Hobby
- hdu 4865 Peter's Hobby(2014 多校联合第一场 E)
- hdu 4865 Peter's Hobby 2014 Multi-University Training Contest 1
- HDOJ 4865 Peter's Hobby(概率dp, viterbi)
- 隐马尔可夫模型(HMM) HDU4865 Peter's Hobby
- HDOJ 4865 Peter's Hobby(维特比算法、隐马尔科夫模型)
- 【线程管理】之篇一
- js访问web,并处理返回值
- hdoj 2045 不容易系列之(3)—— LELE的RPG难题 【动态规划】
- 考研路上的那些一战二战三战成功与失败的故事系列之二
- C3P0 APPARENT DEADLOCK
- HDU 4865 Peter's Hobby
- vs编译器问题
- ACM集训——POJ_1107
- Kinect for Windows SDK v2.0 开发笔记 (六)音频获取
- 指针问题
- Is Bigger Smarter? - UVa 10131 dp
- (BFS,状态空间优化)Holedox Moving,贪吃蛇
- 卖心率表的厂商(网上到处找的整理后得到)
- C#访问web,并处理返回值