zoukankan      html  css  js  c++  java
  • Paths on a Grid POJ

    题意:格路问题 没什么难度 难点在于如何快速计算相对较大的组合数

    思路:运用手写计算组合数的方式进行计算  如c(8,3) 如果手算就是   8*7*6/(3*2*1)这样可以很快得解出

    计算代码为:(精度没问题? 反正能过)

     1 u c(u n,u m){
     2     u a=n+m;
     3     u b=min(n,m);
     4     double ans=1;
     5     while(b>0){
     6         ans*=(1.0*a--)/(1.0*b--);
     7     }
     8     ans+=0.5;//四舍五入
     9     return u(ans);
    10 }

    AC代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cmath>
     6 using namespace std;
     7 const int maxn=10000;
     8 typedef unsigned u;
     9 u c(u n,u m){
    10     u a=n+m;
    11     u b=min(n,m);
    12     double ans=1;
    13     while(b>0){
    14         ans*=(1.0*a--)/(1.0*b--);
    15     }
    16     ans+=0.5;
    17     return u(ans);
    18 }
    19 int main(){
    20     
    21     u a,b;
    22     while(scanf("%u%u",&a,&b)==2){
    23         if(!a&&!b)break;
    24         printf("%u
    ",c(a,b));
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    数位dp
    可持久化Trie
    网络流
    欧拉定理
    点、边双,圆方树
    [USACO5.3]窗体面积Window Area
    6.2三道模拟
    BZOJ2054 疯狂的馒头
    [USACO5.1]夜空繁星Starry Night
    [USACO5.1]乐曲主题Musical Themes
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/10264953.html
Copyright © 2011-2022 走看看