简单DP就输入比较麻烦点
#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<functional>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 1030;
const int inf = 1<<30;
int n,m;
int dp[maxn][maxn],vis[maxn][maxn];
void GetDp()
{
dp[1][1] = 1;
for( int i = 1; i <= n; i ++ ){
for( int j = 1; j <= m; j ++ ){
if( i == j && i == 1 ) continue;
if( vis[i][j] != -1 )
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
char ch;
int cas,x,y;
scanf("%d",&cas);
while( cas -- )
{
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
for( int i = 1; i <= n; i ++ ){
scanf("%d",&x);
y = 0;
ch = getchar();
while( ch != '\n' && ch != -1 ){
ch = getchar();
if( ch == ' ' || ch == '\n' ){
vis[x][y] = -1;
y = 0;
}
else if( ch >= '0' && ch <= '9' )
y = y*10 + ch-'0';
}
}
GetDp();
printf("%d\n",dp[n][m]);
if( cas ) puts("");
}
return 0;
}