SRM 636 div 1
デバッグ用のprintfを消し忘れていたせいでTLEした.つらすぎ
#include <cstdio> #include <algorithm> #include <string> #include <vector> using namespace std; int choco[55][55]; int sum[55][55]; class ChocolateDividingEasy{ public: int h,w; int S(int a, int b, int x, int y){ return sum[x][y] + sum[a][b] - sum[x][b] - sum[a][y]; } int findBest(vector <string> chocolate){ h = chocolate.size(); w = chocolate[0].size(); for(int i = 0; i < h; i++){ for(int j = 0; j < w; j++){ choco[i+1][j+1] = (int)(chocolate[i][j] - '0'); sum[i+1][j+1] = sum[i][j+1] + sum[i+1][j] - sum[i][j] + choco[i+1][j+1]; } } int ans = 0; for(int i = 0; i < h-1; i++){ for(int j = i+1; j < h-1; j++){ for(int s = 0; s < w-1; s++){ for(int t = s+1; t < w-1; t++){ //printf("i=%d j=%d s=%d t=%d\n",i,j,s,t); int r = S(0,0,i+1,s+1); r = min(r,S(0,s+1,i+1,t+1)); r = min(r,S(0,t+1,i+1,w)); r = min(r,S(i+1,0,j+1,s+1)); r = min(r,S(i+1,s+1,j+1,t+1)); r = min(r,S(i+1,t+1,j+1,w)); r = min(r,S(j+1,0,h,s+1)); r = min(r,S(j+1,s+1,h,t+1)); r = min(r,S(j+1,t+1,h,w)); ans = max(ans,r); } } } } return ans; } };