Submission #1133722

#TimeUsernameProblemLanguageResultExecution timeMemory
1133722yellowtoadRaisins (IOI09_raisins)C++20
100 / 100
442 ms24772 KiB
#include <iostream>
using namespace std;

int n, m,dp[60][60][60][60], ps[60][60];

int solve(int x1, int y1, int x2, int y2) {
	if ((x1 == x2) && (y1 == y2)) return 0;
	if (dp[x1][y1][x2][y2]) return dp[x1][y1][x2][y2];
	int minn = 1e9;
	for (int i = x1; i < x2; i++) minn = min(minn,solve(x1,y1,i,y2)+solve(i+1,y1,x2,y2));
	for (int i = y1; i < y2; i++) minn = min(minn,solve(x1,y1,x2,i)+solve(x1,i+1,x2,y2));
	return (dp[x1][y1][x2][y2] = minn+ps[x2][y2]-ps[x1-1][y2]-ps[x2][y1-1]+ps[x1-1][y1-1]);
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> ps[i][j];
			ps[i][j] += ps[i][j-1]+ps[i-1][j]-ps[i-1][j-1];
		}
	}
	cout << solve(1,1,n,m) << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...