设为首页 加入收藏

TOP

hdu-4418-Time travel-高斯+概率dp
2015-07-24 05:54:22 来源: 作者: 【 】 浏览:5
Tags:hdu-4418-Time travel- 高斯 概率

把N个点先转化为2*N-2个点。

比如说把012345转化成0123454321。

这样,就可以找出任意两两个点之间的关系。

然后根据关系可以得出来一个一元多项式的矩阵。

然后就用高斯消元求出矩阵即可。

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         using namespace std; #define eps 1e-6 #define zero(x) ((fabs(x)
        
         fabs(a[r][i]))r=j; } if(!zero(a[r][i]))return 0; if(r!=i){ for(int j=0;j<=n;j++) swap(a[i][j],a[r][j]); } for(int j=i+1;j<=n;j++)a[i][j]/=a[i][i]; a[i][i]=1.0; for(int j=0;j
         
          que; while(!que.empty())que.pop(); que.push(st); memset(g,-1,sizeof(g)); cnt=0; g[st]=cnt++; while(!que.empty()) { int x=que.front(); que.pop(); for(int i=1;i<=m;i++) { if(!zero(p[i]))continue; int y=(i+x)%n; if(g[y]==-1) { g[y]=cnt++; que.push(y); } } } } int main() { int T,d; scanf("%d",&T); while(T--) { scanf("%d%d%d%d%d",&n,&m,&ed,&st,&d); for(int i=1;i<=m;i++) { scanf("%lf",&p[i]); p[i]=1.0*p[i]/100.0; } if(ed==st) { puts("0.00"); continue; } n=2*n-2; if(d==1)st=n-st; bfs(); if(g[ed]==-1&&g[n-ed]==-1){ puts("Impossible !"); continue; } memset(a,0,sizeof(a)); for(int i=0;i
          
           

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDOJ 1281 棋盘游戏 下一篇POJ 2553 The Bottom of a Graph ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: