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;
    }
};