UVa Problem 108 – Maximum Sum

來源:互聯網
上載者:User
// UVa Problem 108 - Maximum Sum// Verdict: Accepted// Submission Date: 2011-11-23// UVa Run Time: 0.112s//// 著作權(C)2011,邱秋。metaphysis # yeah dot net//// [解題方法]// 該題可以歸結為網格上的演算法。實際上可以通過正交範圍查詢來解決,若是用嵌套迴圈來求矩形內元素和,難// 免 TLE。可以參考《挑戰編程:程式設計競賽訓練手冊》第十四章第五節的內容。#include <iostream>#include <cstring>#include <ctime>using namespace std;#define MAXN 110int grid[MAXN][MAXN], dominance[MAXN][MAXN], n;int main (int argc, char const* argv[]){// time_t start = clock();while (cin >> n){for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)cin >> grid[i][j];// 行優先建立優勢矩陣。memset(dominance, 0, sizeof(dominance));for (int i = 0; i < n; i++)for (int j = 0; j < n; j++){dominance[i][j] += grid[i][j];if (i > 0)dominance[i][j] += dominance[i - 1][j];if (j > 0)dominance[i][j] += dominance[i][j - 1];if (i > 0 && j > 0)dominance[i][j] -= dominance[i - 1][j - 1];}// 利用正交範圍查詢找最大和。int maxSum = 0;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)for (int k = i; k < n; k++)for (int l = j; l < n; l++){int tmpSum = dominance[k][l];if (i > 0)tmpSum -= dominance[i - 1][l];if (j > 0)tmpSum -= dominance[k][j - 1];if (i > 0 && j > 0)tmpSum += dominance[i - 1][j - 1];maxSum = max(maxSum, tmpSum);}cout << maxSum << endl;}// cout << (clock() - start) << endl;return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.