乙個機械人從左上走到右下,每次只能往下或往右走,問最後到達右下時能有多少種方法。
1.如果n,m小的話可以遞迴求解,但是這裡n,m太大,陣列開不了。我們取乙個小一點的n,m。用遞推填表,可以發現表是乙個楊輝三角。楊輝三角在第n行第m列的值為c(n-1,m-1)。可以得到[n,m]位置處應該填上c(n-1+m-1,n-1).
2.因為求組合數時要用到除法,在模意義下除法沒有直接的公式算出,不能像乘法那樣每次可以取得中間的餘數,然後餘數相乘還是最後的餘數。將除法轉化為模意義下的逆元就可以解決這個問題
#include// 求c(n+m-2,n-1) % 1e9+7
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define cle(a) memset(a,0,sizeof(a))
#define inf(a) memset(a,0x3f,sizeof(a))
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
using
namespace
std;
const
int inf = ( 2e9 ) + 2;
//const ll maxn =
const
int mod = 1e9+7;
ll qpow(ll a,ll n)
return ret;
}ll solve(int n,int m)
ret=a*qpow(b%mod,mod-2)%mod; //費馬小定理求逆元
return ret;
}int main()
51nod 1119 機械人走方格V2
m n的方格,乙個機械人從左上走到右下,只能向右或向下走。有多少種不同的走法?由於方法數量可能很大,只需要輸出mod 10 9 7的結果。收起輸入 第1行,2個數m,n,中間用空格隔開。2 m,n 1000000 輸出輸出走法的數量 mod 10 9 7。輸入樣例 2 3輸出樣例 3 題目傳送門 i...
51nod1119 機械人走方格 V2
終於學到了求組合數的正確姿勢 c n m 2,m 1 include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i de...
51nod1119 機械人走方格V2
解題關鍵 1 此題用dp的方法可以看出,dp矩陣為楊輝三角,通過總結,可以得出 答案的解為 c 2 此題可用組合數學的思想考慮,總的步數一共有 n m 2 步,在這所有的步數中,需要選擇向下走的步數的位置,由此可得,答案的解為 c 此題即可轉化為大組合數取模問題 1 include2 using n...