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 <script id="MathJax-Element-583" type="math/tex">i</script>用逆原处理即可

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值