hdu4865 Peter's Hobby
2015-07-14 14:03
225 查看
题目大意:已知N天的天气湿度 求出N天最可能的天气状况。其中当天的天气状况
与前一天的天气相关,当天的空气湿度与当前的天气状况相关。第一天
不同天气状况概率已经给出。
思路: 求出不同天气下该种天气湿度的概率 通过找到最大的概率可推知当前的天气
状况 由于当前天气受前一天的影响 因此打表求出每一天不同天气状况之
下对于空气湿度k的概率 之后可利用数组回溯找到对应天气状况
假设dp[i][j] 为当前天气状况为i 时空气湿度为j时的概率 则
dp[i][j] = dp[i-1][k]*waether[k][m]*wep[m][j]
表示i-1天第k种天气状况的概率* 第i天m天气状况的转换概率*m天气下的空气湿度
由于后一天受前一天的影响,所以每天的天气状况并不是对对应湿度概率最大的天气
而是根据最后一天概率最大的天气往前推的最可能的天气
类似的精度问题应该使用log()
代码如下:
与前一天的天气相关,当天的空气湿度与当前的天气状况相关。第一天
不同天气状况概率已经给出。
思路: 求出不同天气下该种天气湿度的概率 通过找到最大的概率可推知当前的天气
状况 由于当前天气受前一天的影响 因此打表求出每一天不同天气状况之
下对于空气湿度k的概率 之后可利用数组回溯找到对应天气状况
假设dp[i][j] 为当前天气状况为i 时空气湿度为j时的概率 则
dp[i][j] = dp[i-1][k]*waether[k][m]*wep[m][j]
表示i-1天第k种天气状况的概率* 第i天m天气状况的转换概率*m天气下的空气湿度
由于后一天受前一天的影响,所以每天的天气状况并不是对对应湿度概率最大的天气
而是根据最后一天概率最大的天气往前推的最可能的天气
类似的精度问题应该使用log()
代码如下:
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; double dp[4][5]={{0,0},{0,0.5,0.375,0.125},{0,0.25,0.125,0.625},{0,0.25,0.375,0.375}}; double wep[4][5]={{0,0},{0,0.6,0.2,0.15,0.05},{0,0.25,0.3,0.2,0.25},{0,0.05,0.10,0.35,0.50}}; int num[55]; int pre[55][5],ans[55]; void solve(int n) { double f[55][5]={-0.10000000}; f[1][1]=0.63*wep[1][num[1]]; f[1][2]=0.17*wep[2][num[1]]; f[1][3]=0.20*wep[3][num[1]]; for(int i=2;i<=n;i++){ for(int j=1;j<=3;j++){ double ma=-0.10000; int ti=0; for(int k=1;k<=3;k++){ double temp=f[i-1][k]*dp[k][j]*wep[j][num[i]]; if(ma<temp) {ma=temp;ti=k;} } f[i][j]=ma,pre[i][j]=ti; } } double ma=-0.10000; int ti=-1; for(int j=1;j<=3;j++) if(f [j]>ma){ ma=f [j]; ti=j; } ans =ti; for(int j=n;j>=2;j--){ ans[j-1]=pre[j][ti]; ti=pre[j][ti]; } return ; } int main() { int t,n,i,j,w; char wet[10]; scanf("%d",&t); for(i=1;i<=t;i++){ scanf("%d",&n); getchar(); for(j=1;j<=n;j++){ gets(wet); if(!strcmp(wet,"Dry")) num[j]=1; else if(!strcmp(wet,"Dryish")) num[j]=2; else if(!strcmp(wet,"Damp")) num[j]=3; else num[j]=4; } solve(n); printf("Case #%d:\n",i); for(j=1;j<=n;j++){ if(ans[j]==1) printf("Sunny\n"); else if(ans[j]==2) printf("Cloudy\n"); else printf("Rainy\n"); } } return 0; }
相关文章推荐
- SDN&NFV推动物联网发展
- LintCode Binary Tree Inorder Traversal 二叉树的中序遍历(非递归)
- python 的日志logging模块学习
- 标准二维表
- 【IE6的BUG一】链接伪类(:hover)CSS背景图片有闪动BUG
- 设计模式
- 文件换行符
- mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
- 【最短路】poj3660 最短路的应用
- linux使用fdisk添加分区的例子
- leetcode[190]:Reverse Bits
- 【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径
- 【转载】JConsole JDK1.6 使用手册
- (L1) AudioService AudioHandler setDeviceVolume, setAllVolumes, persistVolume
- IOS中判断设备型号的宏定义
- JS取出字符串的12种方法
- centos6.2安装jdk7
- HLS 测试用流地址
- flash 时钟
- 服务器安全配置参考