TAG
- 期望、 D F S 、记忆化搜索 期望、DFS、记忆化搜索 期望、DFS、记忆化搜索时间复杂度
- O ( N ∗ K ) O(N \ast K) O(N∗K)
//
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=111;
const int T=555;
struct A{ int y,data; };
vector<A> v[N];
int cost_h[N],h[2][N];
double dp[2][N][T];
double dfs( bool sex,int x,int re )
{
if( dp[sex][x][re] ) return dp[sex][x][re];
int cnt=0;
double ans=0;
for( auto [y,data] : v[x] )
if( re-data-cost_h[y]>=0 )
cnt++,ans+=dfs( sex,y,re-data-cost_h[y] );
if( cnt ) ans/=cnt;
return dp[sex][x][re]=ans+h[sex][x];
}
void solve()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k );
for( int i=1;i<=n;i++ )
scanf("%d%d%d",&cost_h[i],&h[1][i],&h[0][i] );
while( m-- )
{
int x,y,data;
scanf("%d%d%d",&x,&y,&data );
v[x].push_back( (A){ y,data } );
v[y].push_back( (A){ x,data } );
}
double ans1=0,ans0=0;
for( int i=1;i<=n;i++ )
if( k-cost_h[i]>=0 )
ans1+=dfs( 1,i,k-cost_h[i] ),ans0+=dfs( 0,i,k-cost_h[i] );
// 在取值等概率的情况下,期望和均值相等
printf("%.5lf %.5lf\n",ans1/n,ans0/n );
}
signed main()
{
int t=1;
// scanf("%d",&t );
while( t-- ) solve();
return 0;
}
作者 | 乐意奥AI