省赛前练习点动态规划
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
#include <cstdio>
#include <vector>
#include <string>
#include <iterator>
#include <cmath>
#include <deque>
#include <stack>
#include <cctype>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef long double ld;
const int N = 110;
const int INF = 0xfffffff;
const double EPS = 1e-8;
const ll MOD = 1e9 + 7;
const ld PI = acos (-1.0);
#define INFL 0x7fffffffffffffffLL
#define met(a, b) memset(a, b, sizeof(a))
#define put(a) cout << setiosflags(ios::fixed) << setprecision(a)
int n, a[N][N], dp[N];
int solve ()
{
int sum = 0, maxn = -INF;
for (int i=0; i<n; i++)
{
sum += dp[i];
if (sum < 0) sum = 0;
maxn = max (sum, maxn);
}
return maxn;
}
int main ()
{
while (cin >> n)
{
met (a, 0);
met (dp, 0);
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
cin >> a[i][j];
int ans = -INF;
for (int i=0; i<n; i++)
{
met (dp, 0);
for (int j=i; j<n; j++)
{
for (int k=0; k<n; k++)
dp[k] += a[j][k];
ans = max (ans, solve());
}
}
cout << ans << endl;
}
return 0;
}
#include <iostream> #include <algorithm> #include <queue> #include <cstring> #include <cstdio> #include <vector> #include <string> #include <iterator> #include <cmath> #include <deque> #include <stack> #include <cctype> #include <iomanip> using namespace std; typedef long long ll; typedef long double ld; const int N = 110; const int INF = 0xfffffff; const double EPS = 1e-8; const ll MOD = 1e9 + 7; const ld PI = acos (-1.0); #define INFL 0x7fffffffffffffffLL #define met(a, b) memset(a, b, sizeof(a)) #define put(a) cout << setiosflags(ios::fixed) << setprecision(a) int n, a[N][N], dp[N][N][N]; int main () { while (cin >> n) { met (a, 0); met (dp, 0); for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) cin >> a[i][j]; int ans = -INF; for (int i=1; i<=n; i++) { for (int j=1; j<=n; j++) { int sum = 0; for (int k=j; k<=n; k++) { sum += a[i][k]; dp[i][j][k] = max (dp[i-1][j][k] + sum, sum); ans = max (dp[i][j][k], ans); } } } cout << ans << endl; } return 0; }