1. 程式人生 > >51Nod 1118 機器人走方格--求逆元

51Nod 1118 機器人走方格--求逆元

() uic stream pri pac ostream ios iostream %d

(x/y) %mod =x*(y^(mod-2))%mod;

在算x,y的時候可以一直mod 來縮小

y^(mod-2)顯然是個快速冪

#include <iostream>  
#include <stdio.h>  
#include <math.h>  
using namespace std;   
long long mod=1e+9+7;  
long long  quick(long long  n,long long  m)  
{  
    long long ans=1;  
    while(m)  
    {  
        
if(m%2==1) ans=ans*n%mod; m/=2; n*=n; n%=mod; } return ans; } int main() { int n,m; cin>>n>>m; int mu=m+n-2; long long ans_mu=1; long long ans_zi=1; for(int i=m+n-2;i>m-1;i--) ans_zi
=ans_zi*i%mod; for(int j=1;j<=n-1;j++) ans_mu=ans_mu*j%mod; long long tep=quick(ans_mu,mod-2); cout<<ans_zi*tep%mod<<endl; return 0; }

法二:遞推

mp[i][j]=mp[i-1][j]+mp[i][j-1]

#include <bits/stdc++.h>
#define MAXN 1010
#define ll long long
using
namespace std; ll mp[MAXN][MAXN]; const ll mod=1e9+7; int main(void){ int m, n; scanf("%d%d", &n, &m); for(int i=0; i<n; i++){ mp[i][0]=1; } for(int j=0; j<m; j++){ mp[0][j]=1; } for(int i=1; i<n; i++){ for(int j=1; j<m; j++){ mp[i][j]=mp[i-1][j]+mp[i][j-1]; if(mp[i][j]>mod){ mp[i][j]%=mod; } } } printf("%lld\n", mp[n-1][m-1]); return 0; }

51Nod 1118 機器人走方格--求逆元