SRM 559 div2

SRM 558 div2に参加しました
easyは解けた
med はDPで解けそうだなーと思いつつ実装間に合わなかった。
結果は 843 -> 879 (+36)
緑にあと2歩ぐらい届かず。
次こそ、緑になりたい。

#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
using namespace std;

class SurroundingGameEasy{
public:
	int score(vector <string> c, vector <string> bf, vector <string> stn){
		int h, w;
		h = c.size();
		w = c[0].length();
		int stone[h+2][w+2];
		for(int i=0; i<h+2; i++)for(int j=0; j<w+2; j++){
			stone[i][j] = 1;
		}
		for(int i=0;i<h;i++)for(int j=0; j<w; j++){
			stone[i+1][j+1] = (stn[i][j]=='o')?1:0;
		}
		int ans = 0;
		for(int i=1; i<h+1; i++)for(int j=1; j<w+1; j++){
			if(stone[i][j] == 1){
				ans += bf[i-1][j-1] - c[i-1][j-1];
			}else{
				if(stone[i-1][j] && stone[i+1][j] &&
					stone[i][j+1] && stone[i][j-1])
				{
					ans += bf[i-1][j-1] - '0';
				}
			}
		}
		return ans;
	}
};