HDU 5001 Walk / 2014 ACM/ICPC Asia Regional Anshan Online
2014-09-14 00:32
423 查看
题目:
LINK
一共n个点,一个人从每个点出发的概率是1/n,到达邻接点的概率相同,求走d步都不会到达ai点的概率i = [1,n]
暴力枚举每一个点ai, 求的是d步内都不会经过ai,dp[i][j] , 表示走第i步,走到j的概率的值,为了体现不经过ai点,进行dp过程时,不用和ai点相连的边进行状态转移。
ans = sum(dp[d][j]) ( j != ai)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define INF 1000000000
//typedef __int64 LL;
#define N 10005
int t, n, d, m;
double dp
[52];
vector<int > save[55];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
scanf("%d", &t);
while(t--) {
scanf("%d%d%d", &n, &m, &d);
for(int i = 0; i <= n; i++) save[i].clear();
int u, v;
for(int i = 1; i <= m; i++) {
scanf("%d%d", &u, &v);
save[u].push_back(v);
save[v].push_back(u);
}
for(int i = 1; i <= n; i++) {
memset(dp, 0, sizeof(dp));
for(int j = 1; j <= n; j++) dp[0][j] = 1.0 / n;
for(int id = 1; id <= d; id ++) {
for(int j = 1; j <= n; j++) {
if(j == i) continue;
int ddd = save[j].size();
for(int kk = 0; kk < ddd; kk++) {
int k = save[j][kk];
dp[id][k] += 1.0 * dp[id - 1][j] / ddd ;
}
}
}
double ans = 0;
for(int j = 1; j <= n; j++) {
if(j == i) continue;
ans += dp[d][j];
}
printf("%lf\n", ans);
}
}
return 0;
}
LINK
一共n个点,一个人从每个点出发的概率是1/n,到达邻接点的概率相同,求走d步都不会到达ai点的概率i = [1,n]
暴力枚举每一个点ai, 求的是d步内都不会经过ai,dp[i][j] , 表示走第i步,走到j的概率的值,为了体现不经过ai点,进行dp过程时,不用和ai点相连的边进行状态转移。
ans = sum(dp[d][j]) ( j != ai)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define INF 1000000000
//typedef __int64 LL;
#define N 10005
int t, n, d, m;
double dp
[52];
vector<int > save[55];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
scanf("%d", &t);
while(t--) {
scanf("%d%d%d", &n, &m, &d);
for(int i = 0; i <= n; i++) save[i].clear();
int u, v;
for(int i = 1; i <= m; i++) {
scanf("%d%d", &u, &v);
save[u].push_back(v);
save[v].push_back(u);
}
for(int i = 1; i <= n; i++) {
memset(dp, 0, sizeof(dp));
for(int j = 1; j <= n; j++) dp[0][j] = 1.0 / n;
for(int id = 1; id <= d; id ++) {
for(int j = 1; j <= n; j++) {
if(j == i) continue;
int ddd = save[j].size();
for(int kk = 0; kk < ddd; kk++) {
int k = save[j][kk];
dp[id][k] += 1.0 * dp[id - 1][j] / ddd ;
}
}
}
double ans = 0;
for(int j = 1; j <= n; j++) {
if(j == i) continue;
ans += dp[d][j];
}
printf("%lf\n", ans);
}
}
return 0;
}
相关文章推荐
- 2014 ACM/ICPC Asia Regional Anshan Online HDU 4998 HDU 5000 HDU 5001 HDU 5003
- HDU 5001 Walk 求从任意点出发任意走不经过某个点的概率 概率dp 2014 ACM/ICPC Asia Regional Anshan Online
- hdu 5001 Walk 概率dp 2014 ACM/ICPC Asia Regional Anshan Online
- poj 5001 Walk &&2014 ACM/ICPC Asia Regional Anshan Online 1005(dp)
- HDU 5000 Clone / 2014 ACM/ICPC Asia Regional Anshan Online
- hdu 5000 Clone 2014 ACM/ICPC Asia Regional Anshan Online
- HDU 5000 Clone(离散数学+DP)(2014 ACM/ICPC Asia Regional Anshan Online)
- HDU 4998 Rotate / 2014 ACM/ICPC Asia Regional Anshan Online
- HDU 5000 Clone 规律+dp 2014 ACM/ICPC Asia Regional Anshan Online
- hdu 4998 Rotate 2014 ACM/ICPC Asia Regional Anshan Online
- HDU 5002 Tree(动态树LCT)(2014 ACM/ICPC Asia Regional Anshan Online)
- hdu 5003 Osu! 水题 2014 ACM/ICPC Asia Regional Anshan Online
- HDU 5003 Osu! 水题 2014 ACM/ICPC Asia Regional Anshan Online
- HDU 4998 Rotate 计算几何 2014 ACM/ICPC Asia Regional Anshan Online
- hdu 5000 Clone 2014 ACM/ICPC Asia Regional Anshan Online
- hdu 5025 Saving Tang Monk 2014 ACM/ICPC Asia Regional Guangzhou Online bfs
- hdu 5014 Number Sequence 找规律 | 贪心 2014 ACM/ICPC Asia Regional Xi'an Online
- 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix,hdu 5015
- HDU 5015 233 Matrix / 2014 ACM/ICPC Asia Regional Xi'an Online
- HDU 5015 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix