博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 825 - Walking on the Safe Side
阅读量:6948 次
发布时间:2019-06-27

本文共 1298 字,大约阅读时间需要 4 分钟。

题目:在一个N*M的网格中,从左上角走到右下角,有一些点不能经过,求最短路的条数。

分析:dp,帕斯卡三角。每一个点最短的就是走N条向下,M条向右的路。

            到达每一个点的路径条数为左边和上面的路径之和。

说明:注意数据输入格式。

#include 
#include
#include
#include
using namespace std;int smap[101][101];int sums[101][101];int temp[101];int getnumber(int tem[], char str[]){ int move = 0,save = 0; while (str[move]) { while (str[move] < '0' || str[move] > '9') { if (!str[move]) return save; move ++; } int value = 0; while (str[move] >= '0' && str[move] <= '9') { value *= 10; value += str[move ++]-'0'; } tem[save ++] = value; } return save;}int main(){ int T,N,M; char buf[1001]; scanf("%d",&T);getchar(); while (T --) { scanf("%d%d",&N,&M);getchar(); memset(smap, 0, sizeof(smap)); memset(sums, 0, sizeof(sums)); for (int i = 1 ; i <= N ; ++ i) { gets(buf); int count = getnumber(temp, buf); for (int i = 1 ; i < count ; ++ i) smap[temp[0]][temp[i]] = 1; } sums[1][1] = 1; for (int i = 2 ; i <= N && !smap[i][1] ; ++ i) sums[i][1] = 1; for (int i = 2 ; i <= M && !smap[1][i] ; ++ i) sums[1][i] = 1; for (int i = 2 ; i <= N ; ++ i) for (int j = 2 ; j <= M ; ++ j) { sums[i][j] = sums[i-1][j]+sums[i][j-1]; if (smap[i][j]) sums[i][j] = 0; } printf("%d\n",sums[N][M]); if (T) printf("\n"); } return 0;}

转载地址:http://edenl.baihongyu.com/

你可能感兴趣的文章
Maven
查看>>
Unix-Linux 编程实践教程 第八章 小结
查看>>
linux下ElasticSearch安装及问题
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web应用程序
查看>>
Quartus Prime 下载程序到FPGA流程
查看>>
php instanceof 运算符
查看>>
5月3日云栖精选夜读丨寒武纪重磅发布首款AI云芯片,阿里专家告诉你必须注意的Java编程细节...
查看>>
机器学习从业人员到底做什么?
查看>>
MyBatis mapper.xml处理sql中的 大于,小于,大于等于,小于等于
查看>>
java 受检异常和非受检异常
查看>>
GC垃圾回收机制
查看>>
rsync通过服务同步、linux系统日志
查看>>
Redlock:Redis分布式锁最牛逼的实现
查看>>
一篇文章带你解析,乐观锁与悲观锁的优缺点
查看>>
阿里云如何打破Oracle迁移上云的壁垒
查看>>
小技巧:如何突破某些网站只能登陆后才能进行文字拷贝的限制
查看>>
Spring Boot教程(十八)使用Spring StateMachine框架实现状态机
查看>>
区块链如何应用于保险行业
查看>>
自然语言处理工具HanLP被收录中国大数据产业发展的创新技术新书《数据之翼》...
查看>>
五周第三次课(4月20日)8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向...
查看>>