20160219模拟

T1

题目大意

网格图,点权 x[i,j]=x[i1,j]+x[i,j1]x[0,j]=x[i,0]=1
(0,0)(n,m) 路径上的的最小点权和

题解

假设 n<=m ,如果不是先交换
最短明显是先走 m ,再走 n
然后就是加速计算了, x[i,j]=x[i1,j]+x[i,j1] 我们很容易想到杨辉三角,所以就是求 m+1+ni=1Cim+i
然后 Cim+i=Ci1m+i1m+ii ,除以 i 用逆原处理即可

var
    i,j,k:longint;
    n,m,a,b,c,t,ans:int64;
function f(a,b,c:int64):int64; {a^b%c}
var t,y:int64;
begin
    t:=1; y:=a;
    while b<>0 do
        begin
            if (b and 1)<>0 then t:=(t*y)mod c;
            y:=(y*y)mod c;
            b:=b>>1;
        end;
    exit(t);
end;

begin
    readln(n,m); if n>m then begin a:=n; n:=m; m:=a; end;
    ans:=m+1; t:=1000000007; a:=1;
    for i:=1 to n do
        begin
            b:=f(i,t-2,t);
            a:=(((a*(m+i))mod t)*b)mod t;
            ans:=(ans+a)mod t;
        end;
    writeln(ans);
end.

你可能感兴趣的:(20160219模拟)