SSL P2822 I Will Like Matrix!

来源:互联网 发布:程序员团队名称大全 编辑:程序博客网 时间:2024/06/05 16:11

题目大意:

在一个 n ∗ m 的矩阵 A 的所有位置中分别填入 0 或 1,要求填入的数必须满足 Ai,j ≤ Ai,j+1 且
A i,j ≤ A i+1,j 。询问一共有多少种不同的矩阵,并将答案对 1,000,000,007 取模。

题解:

DP:
我们设f[i,j]表示以[i,j]到[n,m]的这个矩阵能有多少种多少构成方法。
初值,f[n,m]=2 [n,m]到[n,m]可以放0/1
f[n,i]=f[n,i+1]+1
[n,i]放0时可以把f[n,i+1]的情况都放下,然后放1只有一种情况
f[i,m]=f[i+1,m]+1
同理
f[i,j]=f[i+1,j]+f[i,j+1]
因为[i+1,j]的构成方案+[i,j+1]的构成方案=[i,j]的构成方案,这里不用+1,因为[i+1,j],[i,j+1]里面已经包含了1的可能

时间复杂度:O(NMK)

var   f:array [0..5001,0..5001] of longint;   i,j,n,m:longint;begin     readln(n,m);     f[n,m]:=2;     for i:=m-1 downto 1 do            f[n,i]:=(f[n,i+1]+1);     for i:=n-1 downto 1 do            f[i,m]:=(f[i+1,m]+1);       for j:=m-1 downto 1 do         for i:=n-1 downto 1 do            f[i,j]:=(f[i,j+1]+f[i+1,j]) mod 1000000007;     writeln(f[1,1]);end.
原创粉丝点击