新数字三角形问题
2016-05-18 17:00
423 查看
新数字三角形问题
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个由n(<=100)行数字组成的数字三角形如下所示。设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。7
3 8
8 1 0
2 74 1
4 5 2 6 1
对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值,并输出这个路径的完整坐标。
输入
多组输入每组数据第一行输入一个n。
接下来的n行,对于第 i(1 --> n) 行每行有 i 个不超过200的正整数
保证对于这n行数据,每行的数字不会重复,如果在某一行的最大值相同了,优先输出靠近左边(j较小)的坐标。
输出
对于每组数据输入一个最大值,占一行。接下来的n行,每行两个整数,代表你得到这个最大值所走的路径坐标。
示例输入
5
7
3 8
8 1 0
2 74 1
4 5 2 6 1
示例输出
30
5 2
4 2
3 1
2 1
1 1
提示
相信大家都做过数字三角形,今天我要在此基础上做一个相似的新数字三角形
主要思想和数字三角形相似:
首先也要从上到下存数字的和,这里有一个地方不一样,他要求输出顺序,那咱们就从上至下比较那个大就是谁。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a[1002][1002];
int max(int n,int m)
{
return n>m?n:m;
}
int b[1002];
int c[1002];
int main()
{
int n,m,i,j;
while(~scanf("%d",&n))
{
for(i = 1;i <= n; i++)
{
for(j = 1;j <=i ;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i = n;i > 1; i--)
{
for(j = 1;j < i; j++)
{
a[i-1][j] = a[i-1][j]+max(a[i][j],a[i][j+1]);
}
}
b[0] = 1;
c[0] = 1;
j = 1;
int k = 1;
for(i = 2;i <= n; i++)
{
if(a[i][j]>a[i][j+1])
{
b[k] = i;
c[k] = j;
k++;
}
else
{
b[k] = i;
c[k] = j+1;
j = j+1;
k++;
}
}
printf("%d\n",a[1][1]);
for(i = n-1;i >= 0; i--)
{
printf("%d %d\n",b[i],c[i]);
}
}
}
代码菜鸟,如有错误,请多包涵!!
相关文章推荐
- C语言实现ping功能(查看设备联网状态)
- SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)
- 柴俊理金:美指疯涨黄金回落,原油震荡冲高在即
- html5-在网页中来回拖放图片
- 控制反转和依赖注入
- 动态加载so文件
- iOS APP删除系统相册中选中的图片
- Win10怎么调节虚拟内存大小? Win10虚拟内存调整的技巧
- 移动端SDK的优化之路
- 排序算法——基数排序
- js try{}catch(err){} 异常处理
- 【bzoj2115】[Wc2011] Xor 线性代数
- Junit参数化设置
- 安卓菜鸟开发笔记(10-7)图片颜色变化
- redis命中率计算
- BZOJ4436 [Cerc2015]Kernel Knights
- 504 Gateway time-out
- Nginx多Server反向代理配置
- 什么是缓存
- 使用google guava做内存缓存