读书人

POJ 1189 钉子跟小球 思路+疑惑

发布时间: 2013-03-12 11:19:35 作者: rapoo

POJ 1189 钉子和小球 思路+疑惑

题目链接:http://poj.org/problem?id=1189

这题我是这么思考的,将钉子和它左右可以钻过小球的地方都看成空格,那么其实一行的空格数就是2*i+1,i为那行的钉子数。如果有3个钉子,那么要看成7个空格。

和很多人的思路可能不同,我觉得该行的可能性可以先照抄上面一行的(当然位置要调整),然后如果该点是钉子的话,将它的可能行平分给左右的空格,所以每行是钉子地方的可能行都是0,这样也就能覆盖把钉子拔出,小球直接落下的情况,因为一开始我们就复制了上一行的可能性。下面上代码:

#include<iostream>#include<algorithm>#include<sstream>#include<cmath>using namespace std;#define llong  long longllong  maxCommon(llong a,llong b){  return a%b==0?b:(maxCommon(b,a%b));};const llong N=110;llong dp[N][N];char input[N][N];int main(){  for(llong i=0;i<N;i++)    for(llong j=0;j<N;j++)      dp[i][j]=0;  llong n,m;  cin>>n>>m;  for(llong i=1;i<=n;i++)  for(llong j=1;j<=i;j++)  cin>>input[i][j];  llong sum=1;  sum<<=n;  if(input[1][1]=='*')  {  dp[1][1]=sum/2;  dp[1][2]=0;  dp[1][3]=sum/2;  }  else  {  dp[1][1]=0;  dp[1][2]=sum;  dp[1][3]=0;  }  for(llong i=2;i<=n;i++)  {  dp[i][0]=0;  llong j=1;  for(;j<=2*i;j++)  dp[i][j]=dp[i-1][j-1];  dp[i][j]=0;  for(llong k=2;k<=2*i;k+=2)  {  if(input[i][k/2]=='*')  {  dp[i][k-1]+=dp[i][k]/2;  dp[i][k+1]+=dp[i][k]/2;  dp[i][k]=0;  }  }  }  llong result=dp[n][2*m+1];  llong common=maxCommon(1<<n,result);  if(result==0)  cout<<"0/1"<<endl;  else  cout<<result/common<<"/"<<sum/common<<endl;  return 0;}


POJ上面的易错的数据都已经测试过,例如:

5 2    .   * .  * . * * * * ** * * * *1/2
6 3     .    * *   * . *  * * * * * * . * ** * * * * * 1/1

#1)( 答案是710466673 / 4294967296 )33 16********************************************************************.**.**.*********.***********.************.****.***********.************.*.****.***********.*****.*********.*****.***.****************.*****************.*****************************************.********************.***.**********************.**.**********************.***********************.***************.*************************.***************************.********************.****************************.*********************************************************************************

#2)(答案是5723285335 / 34359738368)35  16***********************************************.********************.**.**.*********.***********.************.****.***********.************.*.****.***********.*****.*********.*****.***.****************.*****************.*****************************************.********************.***.**********************.**.**********************.***********************.***************.*************************.***************************.********************.****************************.***********************..*********************************.***..******************************.***..**************************************************


数据都测试过了呀!!!!!!!!

但是一直木有accept啊!

求哪位大牛能指出啊?!

读书人网 >其他相关

热点推荐