日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 5001 概率DP || 记忆化搜索

發布時間:2025/4/9 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 5001 概率DP || 记忆化搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2014 ACM/ICPC Asia Regional Anshan Online

給N個點,M條邊組成的圖,每一步能夠從一個點走到相鄰任一點,概率同樣,問D步后沒走到過每一個點的概率

概率DP ?測試數據太水了。。。。10000*50*50*50都能過

加個vector優化到


#include "stdio.h" #include "string.h" #include "vector" using namespace std;double dp[10][101][101]; double ans[101]; vector<int>map[101]; int cnt[101]; int main() {int n,m,d,Case,a,b,i,j,k,l;scanf("%d",&Case);while (Case--){scanf("%d%d%d",&n,&m,&d);memset(cnt,0,sizeof(cnt));while (m--){scanf("%d%d",&a,&b);cnt[a]++;cnt[b]++;map[a].push_back(b);map[b].push_back(a);}memset(dp,0,sizeof(dp));for (i=1;i<=n;i++)for (j=1;j<=n;j++)if (i!=j)dp[0][i][j]+=1.0/n; // dp[d][i][j] 第d步,終點為i,中途不經過j的概率for (i=1;i<=d;i++){memset(dp[i%2],0,sizeof(dp[i%2]));for (j=1;j<=n;j++)for (k=0;k<map[j].size();k++)for (l=1;l<=n;l++)if (j!=l && j!=map[j][k])dp[i%2][map[j][k]][l]+=dp[1-i%2][j][l]*1.0/cnt[j];}memset(ans,0,sizeof(ans));for (i=1;i<=n;i++)for (j=1;j<=n;j++)if (i!=j)ans[i]+=dp[d%2][j][i];for (i=1;i<=n;i++){printf("%.10lf\n",ans[i]);map[i].clear();}}return 0; }

記憶化搜索: 每次去掉一個點,然后對剩下的點進行記憶化搜索

#include "stdio.h" #include "string.h" #include "vector" using namespace std;int vis[101][10011],cnt[101]; double dp[101][10011]; int d; vector<int>map[101]; double dfs(int a,int b,int c) //當前在a點,已經走了b步,不經過c點 {int i;double ans;if (vis[a][b]) return dp[a][b];vis[a][b]=1;ans=0;if (b>d) return dp[a][b]=1;for (i=0;i<map[a].size();i++)if (map[a][i]!=c)ans+=1.0/cnt[a]*dfs(map[a][i],b+1,c);return dp[a][b]=ans;}int main() {int Case,n,m,i,a,b;scanf("%d",&Case);while (Case--){scanf("%d%d%d",&n,&m,&d);memset(cnt,0,sizeof(cnt));for (i=0;i<=n;i++)map[i].clear();while (m--){scanf("%d%d",&a,&b);cnt[a]++;cnt[b]++;map[a].push_back(b);map[b].push_back(a);}memset(dp,0,sizeof(dp));for (i=1;i<=n;i++)map[0].push_back(i);cnt[0]=n;for (i=1;i<=n;i++){memset(vis,0,sizeof(vis));printf("%.10lf\n",dfs(0,0,i));}}return 0; }

轉載于:https://www.cnblogs.com/mfrbuaa/p/4294540.html

總結

以上是生活随笔為你收集整理的HDU 5001 概率DP || 记忆化搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。