博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4865 dp
阅读量:5298 次
发布时间:2019-06-14

本文共 3374 字,大约阅读时间需要 11 分钟。

Peter's Hobby

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 56    Accepted Submission(s): 17


Problem Description
Recently, Peter likes to measure the humidity of leaves. He recorded a leaf humidity every day. There are four types of leaves wetness: Dry , Dryish , Damp and Soggy. As we know, the humidity of leaves is affected by the weather. And there are only three kinds of weather: Sunny, Cloudy and Rainy.For example, under Sunny conditions, the possibility of leaves are dry is 0.6.
Give you the possibility list of weather to the humidity of leaves.
The weather today is affected by the weather yesterday. For example, if yesterday is Sunny, the possibility of today cloudy is 0.375.
The relationship between weather today and weather yesterday is following by table:
Now,Peter has some recodes of the humidity of leaves in N days.And we know the weather conditons on the first day : the probability of sunny is 0.63,the probability of cloudy is 0.17,the probability of rainny is 0.2.Could you know the weathers of these days most probably like in order?
 

Input
The first line is T, means the number of cases, then the followings are T cases. for each case:
The first line is a integer n(n<=50),means the number of days, and the next n lines, each line is a string shows the humidity of leaves (Dry, Dryish, Damp, Soggy)
 

Output
For each test case, print the case number on its own line. Then is the most possible weather sequence.( We guarantee that the data has a unique solution)
 

Sample Input
 
1 3 Dry Damp Soggy
 

Sample Output
 
Case #1: Sunny Cloudy Rainy
Hint
Log is useful.
 

Source
#include
#include
#define N 100double leave[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 yt[3][3]={0.5, 0.375, 0.125, 0.25, 0.125, 0.625, 0.25, 0.375, 0.375};double dp[N][N];int mark[N][N],ans[N],a[N];void solve(int x,int y){ int i,u; double max,b; max=-1; for(i=0;i<3;i++) { b=dp[x-1][i]*yt[i][y]*leave[y][a[x]]; if(b>max) { max=b; u=i; } } dp[x][y]=max; mark[x][y]=u;}void print(int n){ int i,x,k; x=0; k=0; for(i=0;i<3;i++) { if(dp[n][i]>dp[n][x]) x=i; } ans[k++]=x; for(i=n-1;i>=1;i--) { x=mark[i+1][x]; ans[k++]=x; } for(i=k-1;i>=0;i--) { if(ans[i]==0) printf("Sunny\n"); else if(ans[i]==1) printf("Cloudy\n"); else if(ans[i]==2) printf("Rainy\n"); }}int main(){ int t,cnt=1,i,j,n; char str[N]; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%s",str); if(strcmp(str,"Dry")==0) a[i]=0; else if(strcmp(str,"Dryish")==0) a[i]=1; else if(strcmp(str,"Damp")==0) a[i]=2; else a[i]=3; }//dp[i][j]表示的是第i天天气是j的概率最大值 memset(dp,0,sizeof(dp)); dp[1][0]=0.63*leave[0][a[1]]; dp[1][1]=0.17*leave[1][a[1]]; dp[1][2]=0.2*leave[2][a[1]]; for(i=2;i<=n;i++) { for(j=0;j<3;j++) solve(i,j); } printf("Case #%d:\n",cnt++); print(n); } return 0;}

转载于:https://www.cnblogs.com/gcczhongduan/p/5058799.html

你可能感兴趣的文章
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>