【DP】ZOJ 3605 Find the Marble

来源:互联网 发布:淘宝咸鱼电话 编辑:程序博客网 时间:2024/05/22 21:52

点击打开链接

题意:

N个杯子,开始小球在第S个杯子中,

M次 杯子互换,但是只看到了K次互换,问小球最后在哪个杯子的概率最大

三维记录:第几次互换,第几次看到,球的位置

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ll long longll t,n,m,k,d,a[111],b[111],dp[55][55][55];int main(){    cin>>t;    while(t--)    {        cin>>n>>m>>k>>d;        for(int i=1;i<=m;i++)            cin>>a[i]>>b[i];        memset(dp,0,sizeof(dp));        for(int i=0;i<=m;i++)            dp[i][0][d]=1;        for(int i=1;i<=m;i++)//m        {            for(int j=1;j<=i&&j<=k;j++)//枚举k            {                dp[i][j][a[i]]+=dp[i-1][j-1][b[i]];//看到                dp[i][j][b[i]]+=dp[i-1][j-1][a[i]];                for(int l=1;l<=n;l++)//没看到                {                    dp[i][j][l]+=dp[i-1][j][l];                    if(l!=a[i]&&l!=b[i])                        dp[i][j][l]+=dp[i-1][j-1][l];                }            }        }        ll Max=0,p;        for(int i=1;i<=n;i++)        {            if(Max<dp[m][k][i])                Max=dp[m][k][i],p=i;        }        cout<<p<<endl;    }    return 0;}


0 0
原创粉丝点击