公共汽车
2015-12-17 21:17
176 查看
题目描述:
一个城市的道路,南北向的路有n条,并由西向东从1标记到n,东西 向的路有m条,并从南向北从1标记到m,每一个交叉点代表一个路口, 有的路口有正在等车的乘客。一辆公共汽车将从(1,1)点驶到(n,m) 点,车只能向东或者向北开. 问:司机怎么走能接到最多的乘客。
【输入】
第一行是n,m和k,其中k是有乘客的路口的个数。 以下k行是有乘客的路口的坐标和乘客的数量。已知每个 路口的乘客数量不超过1000000。n,m<=1000.
样例
8 7 11
4 3 4
6 2 4
2 3 2
5 6 1
2 5 2
1 5 5
2 1 1
3 1 1
7 7 1
7 4 2
8 6 2
【输出】
接到的最多的乘客数。
11
分析:DP问题
a[i,j]: (i,j)位置的人数;
f[i,j]:从(1,1)走到(i,j)能接的最多人数。
递推方程:f[i,j]:=max{f[i-1,j],f[i,j-1]}+a[i,j]
可以优化,直接用a[i,j]数组操作,下面的代码就是用优化后的代码写的。
一个城市的道路,南北向的路有n条,并由西向东从1标记到n,东西 向的路有m条,并从南向北从1标记到m,每一个交叉点代表一个路口, 有的路口有正在等车的乘客。一辆公共汽车将从(1,1)点驶到(n,m) 点,车只能向东或者向北开. 问:司机怎么走能接到最多的乘客。
【输入】
第一行是n,m和k,其中k是有乘客的路口的个数。 以下k行是有乘客的路口的坐标和乘客的数量。已知每个 路口的乘客数量不超过1000000。n,m<=1000.
样例
8 7 11
4 3 4
6 2 4
2 3 2
5 6 1
2 5 2
1 5 5
2 1 1
3 1 1
7 7 1
7 4 2
8 6 2
【输出】
接到的最多的乘客数。
11
分析:DP问题
a[i,j]: (i,j)位置的人数;
f[i,j]:从(1,1)走到(i,j)能接的最多人数。
递推方程:f[i,j]:=max{f[i-1,j],f[i,j-1]}+a[i,j]
可以优化,直接用a[i,j]数组操作,下面的代码就是用优化后的代码写的。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn=1010; long a[maxn][maxn]; int main() { int n,m,k,t,s,c; scanf("%d%d%d",&n,&m,&k); memset(a,0,sizeof(a)); for (int i=0;i<k;i++) { scanf("%d%d%d",&t,&s,&c); a[t][s]=c; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) a[i][j]+=max(a[i][j-1],a[i-1][j]); printf("%ld",a [m]); return 0; }
相关文章推荐
- QT之sqlite连接
- VIM Tutor Summary
- 黑马程序员 - C语言 - 小明的艳遇
- CSDN课程。。。。。。
- svn安装【转载】
- 第一个C语言程序
- Android中JNI的使用方法
- 什么是 MIME TYPE?
- SVN几个重要的问题
- 网络流做题汇总
- CSS核心内容整理
- Codeforces Round #287 (Div. 2) A. Amr and Music
- Maven项目Update Project之后jre被改成JSE1.4的问题
- 黑马程序员_java基础_GUI
- [javase学习笔记]-6.3 对象的内存体现
- C语言:定义指向二维数组的指针变量
- 湖南省第九届大学生程序设计竞赛
- AngularJs中,如何在ng-repeat完成之后,执行Js脚本
- 2345
- Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法