UVA825

 1 // 题意:从左上角走到右下角,有多少条路,输入比较麻烦 = =
 2 //第一行case数,后一空行,接下来 N,M, 再N行,第一个数是行号,其后 不确定的X个数,表示此行该处不能走
 3 //定义 f[i][j]为走到(i,j)时存在多少条路
 4 #include<cstdio>
 5 #include<algorithm>
 6 #include<cstring>
 7 using namespace std;
 8 int g[1010][1010],f[1010][1010];
 9 void fun(int l,char str[])
10 {
11     int len=strlen(str),num=0;
12     for(int i=0;i<=len;i++) // <=len是因为如果到最后num不为零,则需要else把它存起来
13     {
14         if(str[i]>=‘0‘ && str[i]<=‘9‘)
15             num=num*10+(str[i]-48);
16         else
17         {
18             g[l][num]=1,num=0;
19         }
20     }
21 }
22 int main()
23 {
24     int t,n,m,line;
25     char s[1010];
26     scanf("%d",&t);
27     while(t--)
28     {
29         scanf("%d%d",&n,&m);
30         memset(g,0,sizeof(g));
31         for(int i=0;i<n;i++)
32         {
33             scanf("%d",&line);
34             gets(s);
35             fun(line,s);
36         }
37         memset(f,0,sizeof(f));
38         f[0][1]=1;
39         for(int i=1;i<=n;i++)
40         {
41             for(int j=1;j<=m;j++)
42             {
43                 if(g[i][j]) continue;
44                 f[i][j]=f[i-1][j] + f[i][j-1];
45             }
46         }
47         printf("%d\n",f[n][m]);
48         if(t) printf("\n");
49     }
50     return 0;
51 } 
时间: 2024-09-28 16:17:08

UVA825的相关文章