SSLOJ 1327 I Will Like Matrix!
Description–
在一个 n ∗ m 的矩阵 A 的所有位置中分别填入 0 或 1,要求填入的数必须满足 Ai,j ≤ Ai,j+1 且
Ai,j ≤ Ai+1,j。询问一共有多少种不同的矩阵,并将答案对 1, 000, 000, 007 取模。
Input–
共一行包含两个整数 n 和 m。
Output–
共一行包含一个整数 ans,表示矩阵个数模 1, 000, 000, 007 的值。
Sample Input–
2 2
Sample Output–
6
说明–
对于 60% 的数据:n, m, k ≤ 300
对于 100% 的数据:n, m, k ≤ 5000
解题思路–
a[ i ][ j ]表示以( i , j )为左上角,以( n , m )为右下角的矩阵有a[ i ][ j ]种不同的矩阵。
a[ i ][ j ] = a[ i+1 ][ j ] + a[ i ][ j+1 ]
代码–
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,a[5005][5005];
int main()
{
scanf("%d%d",&n,&m);
a[n][m]=2;//赋初值
for (int i=n-1;i>=1;--i)
a[i][m]=a[i+1][m]+1;
for (int i=m-1;i>=1;--i)
a[n][i]=a[n][i+1]+1;
for (int i=n-1;i>=1;--i)
for (int j=m-1;j>=1;--j)
a[i][j]=(a[i+1][j]+a[i][j+1])%1000000007;
printf("%d",a[1][1]);
return 0;
}