您的位置:首页 > 其它

zoj--3822--第二题概率dp

2014-10-31 17:31 281 查看
这题 比上次那个概率dp难多了 自己感觉...

而且 这题的来源是 我上次去的 牡丹江区域赛..

FML------不想多说了

dp[ i ][ j ][ k ]表示用 k 个棋子占领了 I 行 J 列 < 每一个坐标为(x,y)的棋子都可以占领它所在的第 X 行 第 Y 列 >

那么假如现在已经放了K个棋子 并且占领了 I 行 J列 那么对于将要放下去的第(k+1)个棋子 将会有4种不同情况的发生<保证棋盘还有空格在还可以继续放的情况下>

这里的 n * m - k 就是指一共有n * m 个格子已经放了k个格子 还可以放的格子数量

1.-这第(k+1)个棋子放在了已经占领的 I 行 J列 中的某行某列中

可以求出 P1 = ( i * j - k ) / ( n * m - k )

对应 状态转移方程 则是 dp[ i ] [ j ] [ k ] = dp[ i ] [ j ] [ k-1 ] * P1 ;

2.-这第(k+1)个棋子放在 已占领的某J列之一中但不在已占领的某I行 之一

可以求出P2 = ( n - i ) * j / ( n * m - k )

对应 dp[ i+1 ][ j ][ k ] = dp[ i ][ j ][ k-1 ] * P2;//这个棋子又多占领了 一行

3-这第(k+1)个棋子放在 已占领的某I行之一中但不在已占领的某J列 之一

可以求出P3 = ( m-j ) * i / ( n * m - k )

对应 dp[ i ][ j+1 ][ k ] = dp[ i ][ j ]][ k-1 ] * P3;//这个棋子又多占领了一列

4-这第(k+1)个棋子放在 未占领(n-i)行与(m-j)列之上

可以求出P4 = ( n - i ) * ( m - j ) / ( n * m - k )

对应 dp[ i+1 ][ j+1 ][ k ] = dp[ i ][ j ][ k-1 ] * P4;//这个棋子又多占领了 一行 和 一列

其实 我们可以发现在 n >=1 && m>=1 的情况下 最少需要放置的棋子数量是1 最多需要放置的棋子数量是 maxNum = ( max(n,m)-1 ) * min(n,m) + 1

最好就是一个累加求和了

ans = Sigma( dp
[m][k] ) k = 1,2,………maxNum;

#include <iostream>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;

const int size = 55;
double dp[size][size][size*size];

int main()
{
int t , n ,m , maxNum;
double ans;
cin >> t;
while( t-- )
{
ans = 0;
memset( dp , 0 , sizeof(dp) );
dp[0][0][0] = 1;
cin >> n >> m;
maxNum = ( max(n,m)-1 ) * min(n,m) + 1;
for( int i = 1 ; i<=n ; i++ )
{
for( int j = 1 ; j<=m ; j++ )
{
for( int k = 1 ; k<=maxNum ; k++ )
{
dp[i][j][k] = ( dp[i-1][j][k-1] * (n-i+1) * j  + dp[i][j-1][k-1] * (m-j+1) * i  + dp[i-1][j-1][k-1] * (n-i+1) * (m-j+1) ) / ( n*m-k+1 );
if( i==n && j==m )
continue;
else
dp[i][j][k] += dp[i][j][k-1] * ( i*j-k+1 ) / (n*m-k+1);
}
}
}
for( int k = 1 ; k<=maxNum ; k++ )
{
ans += k * dp
[m][k];
}
cout << setiosflags(ios::fixed);
cout << setprecision(12) << ans <<endl;
}
return 0;
}


View Code

today:

  为什么我们期待的事总是不会到来呢?

  因为我们人为地给它增加了发生概率 甚至逼近100%

  但是我们害怕的事总是会到来

  因为我们自己的恐惧而导致我们自己不能发挥平常的水准
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: