南阳理工OJ_题目10 skiing
2014-04-24 17:54
337 查看
//最长单调递减序列变形 #include <iostream> #include <cstring> using namespace std; int dp(int , int ); int a[110][110]; int d[110][110]; int r; int c; int main() { int T; cin >> T; while(T--) { cin >> r >> c; for(int i = 0; i <= r+1; i++) a[i][0] = a[i][r+1] = 11111; for(int j = 0; j <= c+1; j++) a[0][j] = a[c+1][j] = 11111; for(int i = 1; i <= r; i++) for(int j = 1; j <= c; j++) cin >> a[i][j]; int max_len = 0; memset(d, 0, sizeof(d)); for(int i = 1; i <= r; i++) for(int j = 1; j <= c; j++) max_len = max_len > dp(i, j) ? max_len : dp(i, j); cout << max_len << endl; } } int dp(int i, int j) { if(d[i][j] > 0) return d[i][j]; d[i][j] = 1; if(i >= 1 && i <= r && j >= 1 && j <= c) { if(a[i][j] > a[i-1][j]) d[i][j] = d[i][j] > (dp(i-1, j) + 1) ? d[i][j] : (dp(i-1, j) + 1); if(a[i][j] > a[i+1][j]) d[i][j] = d[i][j] > (dp(i+1, j) + 1) ? d[i][j] : (dp(i+1, j) + 1); if(a[i][j] > a[i][j-1]) d[i][j] = d[i][j] > (dp(i, j-1) + 1) ? d[i][j] : (dp(i, j-1) + 1); if(a[i][j] > a[i][j+1]) d[i][j] = d[i][j] > (dp(i, j+1) + 1) ? d[i][j] : (dp(i, j+1) + 1); return d[i][j]; } else return 0; }
相关文章推荐
- 南阳理工oj 10 skiing 动态规划
- nyoj 题目10 skiing —— 南阳oj
- nyoj 题目10 skiing —— 南阳oj
- 南阳理工oj题目练习---ASCII码排序
- 南阳理工OJ_题目710 外星人的供给站
- 南阳理工OJ 题目845 无主之地1
- 南阳理工OJ_题目545 Metric Matrice
- 南阳理工oj题目练习---Binary String Matching
- 南阳理工OJ_题目16 矩形嵌套
- 南阳理工OJ_题目91 阶乘之和
- 南阳理工OJ_题目104 最大和
- 南阳理工OJ_题目170 网络的可靠性
- 南阳理工OJ_题目1023 还是回文
- 九度OJ-题目1169:比较奇偶数个数-10计院上机A
- 南阳理工OJ_题目540 奇怪的排序
- 南阳理工OJ_题目17 单调递增最长子序列
- 南阳理工OJ_题目712 探 寻 宝 藏
- 南阳理工OJ_题目20 吝啬的国度
- 九度OJ-题目1170:找最小数-10计院上机B
- 题目10:skiing