国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[編程題]在一個N*N的數組中尋找所有橫,豎,左上到右下,右上到左下,四種方向比較

2019-11-06 06:37:11
字體:
來源:轉載
供稿:網友

在一個N*N的數組中尋找所有橫,豎,左上到右下,右上到左下,四種方向的直線連續D個數字的和里面最大的值

輸入描述: 每個測試輸入包含1個測試用例,第一行包括兩個整數 N 和 D : 3 <= N <= 100 1 <= D <= N 接下來有N行,每行N個數字d: 0 <= d <= 100

輸出描述: 輸出一個整數,表示找到的和的最大值

輸入例子: 4 2 87 98 79 61 10 27 95 70 20 64 73 29 71 65 15 0

輸出例子: 193

#include <iostream>#include <vector>#include <cstring>#include <algorithm>using namespace std;int main(){ int n, d; cin >> n >> d; vector<vector<int>> vec(n, vector<int>(n, 0)); int w = 0; while (w<n) { int j = 0; while (j < n){ int x; cin >> x; vec[w][j] = x; ++j; } ++w; } vector<vector<int>> dp(n + 1 - d, vector<int>(n, 0)); for (int j = 0; j != n; ++j) { int k = 0; while (k <d){ dp[0][j] += vec[k][j]; ++k; } } for (int i = 1; i != n + 1 - d; ++i) { for (int j = 0; j != n; ++j) { dp[i][j] = dp[i - 1][j] + (vec[i + d - 1][j] - vec[i - 1][j]); } } int max1 = 0; int temp = 0; for (int i = 0; i != n + 1 - d; ++i){ for (int j = 0; j != n; ++j) { temp = dp[i][j]; if (temp>max1) max1 = temp; } } vector<vector<int>> dp1(n, vector<int>(n + 1 - d, 0)); for (int j = 0; j != n; ++j) { int k = 0; while (k <d){ dp1[j][0] += vec[j][k]; ++k; } } for (int i = 0; i != n; ++i) { for (int j = 1; j != n + 1 - d; ++j) { dp1[i][j] = dp1[i][j - 1] + (vec[i][j + d - 1] - vec[i][j-1]); } } int max2 = 0; temp = 0; for (int i = 0; i != n; ++i){ for (int j = 0; j != n + 1 - d; ++j) { temp = dp1[i][j]; if (temp>max2) max2 = temp; } } vector<vector<int>> dp2(n, vector<int>(n, 0)); for (int i = 0; i != n; ++i) { for (int j = 0; j != n; ++j) { int k = 0; int temp2 = 0; while (k < d&&i+k<n&&j+k<n){ temp2 += vec[i + k][j + k]; ++k; } dp2[i][j] = temp2; } } int max3 = 0; temp = 0; for (int i = 0; i != n; ++i){ for (int j = 0; j != n ; ++j) { temp = dp2[i][j]; if (temp>max3) max3 = temp; } } vector<vector<int>> dp3(n, vector<int>(n, 0)); for (int i = 0; i != n; ++i) { for (int j = 0; j != n; ++j) { int k = 0; int temp3 = 0; while (k < d&&i-k>=0&&j-k>=0){ temp3 += vec[i - k][j - k]; ++k; } dp3[i][j] = temp3; } } int max4 = 0; temp = 0; for (int i = 0; i != n; ++i){ for (int j = 0; j !=n; ++j) { temp = dp3[i][j]; if (temp>max4) max4 = temp; } } cout << max(max(max1, max2), max(max3, max4)) << endl; return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝南县| 怀仁县| 宝山区| 镶黄旗| 怀化市| 哈尔滨市| 马关县| 齐河县| 衢州市| 巩义市| 准格尔旗| 石泉县| 阿拉善盟| 师宗县| 扬中市| 南召县| 长葛市| 广元市| 高清| 大洼县| 全州县| 英吉沙县| 翁牛特旗| 拜城县| 丹东市| 凌源市| 双柏县| 双流县| 瑞安市| 曲麻莱县| 炉霍县| 菏泽市| 凤庆县| 陇川县| 分宜县| 房产| 桐乡市| 攀枝花市| 临泉县| 马关县| 资兴市|