算法导论---学习笔记012
来源:互联网 发布:多多软件站解压密码 编辑:程序博客网 时间:2024/04/28 19:47
题目:
思考:
用一个矩阵s来存储N*N的棋盘,用ans来存储中间过程
(1)初始化:ans[i][j] = s[i][j] (i = N)
(2)递推:ans[i][j] = MAX(s[i+1][j-1], s[i+1][j], s[i+1][j+1]) + s[i][j] (1<=i<N)
(3)结果:answer = MAX(s[i][j]) (i = 1)
代码:
- #include <iostream>
- using namespace std;
- #define N 10
- //为了便于处理边界问题
- int map[N+2][N+2];
- int max(int a, int b, int c)
- {
- if(a > b)
- return a > c ? a : c;
- else
- return b > c ? b : c;
- }
- int main()
- {
- int i, j, n;
- while(cin>>n)
- {<span style="white-space:pre"> </span>memset(map, 0, sizeof(map));
- //生成随机测试数据
- for(i = 1; i <= n; i++)
- {
- for(j = 1; j <= n; j++)
- {
- // cin>>map[i][j];
- map[i][j] = rand() % 10 - 5;
- cout<<map[i][j]<<' ';
- }
- cout<<endl;
- }
- int MAX = -0x7fffffff;
- //数组s与数组ans合并为数组map
- //ans[i][j] = s[i][j] (i = N)
- for(i = n-1; i >= 1; i--)
- {
- for(j = 1; j <= n; j++)
- {
- //ans[i][j] = MAX(s[i+1][j-1], s[i+1][j], s[i+1][j+1]) + s[i][j] (1<=i<N)
- map[i][j] = map[i][j] + max(map[i+1][j-1], map[i+1][j], map[i+1][j+1]);
- //answer = MAX(s[i][j]) (i = 1)
- if(i == 1 && map[i][j] > MAX)
- MAX = map[i][j];
- }
- }
- cout<<MAX<<endl;
- }
- return 0;
- }
0 0
- 算法导论---学习笔记012
- 《算法导论》学习笔记
- 《算法导论》学习笔记
- 算法导论学习笔记
- 《算法导论》学习笔记
- 算法导论学习笔记-1
- 算法导论学习笔记-2
- 算法导论分而治之学习笔记
- 《算法导论》学习笔记 前言
- 算法导论--学习笔记01
- 算法导论--学习笔记02
- 算法导论--学习笔记03
- 算法导论----学习笔记04
- 算法导论------学习笔记05
- 算法导论---学习笔记06
- 算法导论---学习笔记07
- 算法导论----学习笔记08
- 算法导论--学习笔记09
- BingObjectnessCVPR14源码编译环境由vs2012+64位转换为vs2012+32位机过程
- 学习笔记-12.01--基本语法
- IOS开发---C语言-⑳枚举
- Sonatype Nexus中央仓库索引下载失败解决方法
- jquery设置背景图片
- 算法导论---学习笔记012
- LayoutInflater的获取与使用
- HTTP请求报文和HTTP响应报文
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present
- JQuery 正则表达式
- What happens when you type a URL in browser
- 设计模式之组合模式
- mini6410 中断之tasklet和工作队列
- swift 视频教程