lightOj 1004 数塔
2016-01-17 16:46
465 查看
题目大意:类似于数塔,求在一个菱形里每行选一个数的最大值。。。。选的数据必须相邻,,具体看题目
思路:每个状态都有上一行的状态决定,当前位置在上一行的位置的基础上选一个最大值即可。。
思路:每个状态都有上一行的状态决定,当前位置在上一行的位置的基础上选一个最大值即可。。
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <fstream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <iomanip> using namespace std; #define maxn 105 #define MOD 1000000007 #define mem(a , b) memset(a , b , sizeof(a)) #define LL long long #define INF 1000000000 LL arr[maxn][maxn]; LL dp[maxn]; int main() { int t , k = 1; scanf("%d" , &t); while(t--) { int n; scanf("%d" , &n); int up = 2 * n - 1; mem(arr , 0); for(int i = 1 ; i <= up ; i ++) { int tmp = i; if(i > n) tmp = n - (i - n); for(int j = 1 ; j <= tmp ; j ++) { scanf("%lld" , &arr[i][j]); } } int flag = 0; for(int i = 2 ; i <= up ; i ++) { int tmp = i; if(i > n) {flag = 1;tmp = n - (i - n);} for(int j = 1 ; j <= tmp ; j ++) { if(!flag) arr[i][j] += max(arr[i-1][j] , arr[i-1][j-1]); else arr[i][j] += max(arr[i-1][j] , arr[i-1][j+1]); } } printf("Case %d: %lld\n" , k++ , arr[up][1]); } }
相关文章推荐
- makefile常用函数
- 详解coredump【转】
- Android onTouch
- Hive UDF教程(一)
- 汇编的学习
- First Bad Version
- 用sublime text 3 编译运行scala程序
- java学习—day_4
- pythonchallenge(29-33)
- MyEclipse中没有支持tomcat7.x时候怎么使用Tomcat7
- hdu-2364-Escape(bfs)
- HTTP请求报文和HTTP响应报文
- IOS开发OC 如何将导航栏左侧系统自动生成的返回按钮的文字去掉,只保留小于号"<"图案
- Android界面设计的4种方式之三——使用XML和JAVA代码混合控制UI界面
- malloc和memcpy简单介绍
- pythonchallenge(25-28)
- akka 学习笔记
- 4、React对组件的DOM事件监听
- checkbox选取,全选
- reset命令不见了!!调试u-boot遇到的怪问题