I Will Like Matrix!【DP】

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;
}

猜你喜欢

转载自blog.csdn.net/qq_43654542/article/details/90699270
今日推荐