uva825

来源:互联网 发布:python接口测试框架 编辑:程序博客网 时间:2024/06/06 19:50

题目的意思就是问从左上的点走到右下的点有几条不同的路,某些点不能走..

dp思路很简单.走到这个点的数量,等于走到它上面那个点的数量 ,和左边那个点的数量的和.


就是读入麻烦.因为数字间不只一个空格..


AC代码:


#include<stdio.h>#include<string.h>const int N = 1000;int g[N][N];int f[N][N];int r,c;char temp[N];int dp (int r ,int c) {    if( r < 1 || c < 1)         return 0;if (g[r][c] == 1) {f[r][c] = 0;//dp(r - 1 , c);//dp(r , c - 1);return 0;}    if(f[r][c] != -1)        return f[r][c];    f[r][c] = dp(r - 1 , c) + dp (r , c - 1);    return f[r][c];}int main () {int t;int a,b;char ch;scanf("%d",&t);while (t--) {memset(g , 0 ,sizeof(g));memset(f , -1 ,sizeof(f));f[1][1] = 1;scanf("%d%d",&r,&c);for(int i = 1 ; i <= r ;i++) {bool flag = true;scanf("%d",&a);while(1) {b = 0;if(flag) while((ch = getchar()) == ' ');elsebreak;if(ch == '\n')break;b += (ch - 48);while(ch = getchar()) {if(ch <= '9' && ch >= '0') {b = b * 10 + (ch - 48);}else if (ch == ' '){break;}else if (ch == '\n'){flag = false;break;}}g[a][b] = 1;}}dp(r,c);//for (int i = 1 ; i <= r;i++) {//for (int j = 1 ; j <= c ; j++) {//printf("%d ",f[i][j]);//}//printf("\n");//}printf("%d\n",f[r][c]);if(t)printf("\n");}}


0 0
原创粉丝点击