codeforces 540D - Bad Luck Island

来源:互联网 发布:bootstrap affix.js 编辑:程序博客网 时间:2024/05/19 16:35

记忆化搜索...

#include <iostream>#include <queue>#include <stack>#include <map>#include <set>#include <bitset>#include <cstdio>#include <algorithm>#include <cstring>#include <climits>#include <cstdlib>#include <cmath>#include <time.h>#define maxn 1005#define maxm 40005#define eps 1e-12#define mod 1000000007#define INF 0x3f3f3f3f#define PI (acos(-1.0))#define lowbit(x) (x&(-x))#define mp make_pair#define ls o<<1#define rs o<<1 | 1#define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R#pragma comment(linker, "/STACK:102400000,102400000")#define pii pair<int, int> typedef long long LL;typedef unsigned long long ULL;//typedef int LL;using namespace std;LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;}LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}// headdouble dp[105][105][105][3];int vis[105][105][105][3];double dfs(int a, int b, int c, int k){if(vis[a][b][c][k]) return dp[a][b][c][k];if(a < 0 || b < 0 || c < 0) return 0;if(k == 0) {if(a > 0 && b == 0 && c == 0) return 1;if(a == 0) return 0;}if(k == 1) {if(b > 0 && a == 0 && c == 0) return 1;if(b == 0) return 0;}if(k == 2) {if(c > 0 && a == 0 && b == 0) return 1;if(c == 0) return 0;}double ans = 0;ans += a * b * dfs(a, b-1, c, k);ans += a * c * dfs(a-1, b, c, k);ans += b * c * dfs(a, b, c-1, k);ans /= a * b + b * c + a * c;vis[a][b][c][k] = 1;return dp[a][b][c][k] = ans;}int main(){int a, b, c;scanf("%d%d%d", &a, &b, &c);printf("%.11f %.11f %.11f\n", dfs(a, b, c, 0), dfs(a, b, c, 1), dfs(a, b, c, 2));return 0;}


0 0