SRM 557 div2

SRM 557 div2に参加しました。
英語力がついていて、問題文をモリモリ読めた気がする。
あと、1つ撃墜できたのでよかった。
715 -> 843 (+128)
はやく緑になりたい(小並感)

easy250

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

class GreatFairyWar{
public:
	int minHP(vector <int> dps, vector <int> hp){
		int N = dps.size();
		int s=0;
		int ans = 0;
		for(int i =0; i < N; i++){
			s+=hp[i];
			ans += dps[i] * s;
		}
		return ans;
	}
};

500

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

class IncubatorEasy{
public:
	bool lv[10][10];
	bool pr[10];
	bool ma[10];
	bool visited[10];
	int N;
	void change(int n){
		if(visited[n])return;
		visited[n] = true;
		for(int i=0; i<N; i++){
			if(lv[n][i]){
				pr[i] = true;
				change(i);
			}
		}
	}
	int solve(int n){
		if(n==N){
			int ans=0;
			for(int i=0;i<N;i++)
				if(ma[i] && !pr[i])
					ans++;
			return ans;
		}
		int ret;
		bool pr_[10];
		bool ma_[10];
		for(int i=0;i<N;i++){
			pr_[i] = pr[i];
			ma_[i] = ma[i];
		}
		ret = solve(n+1);
		for(int i=0;i<N;i++){
			pr[i] = pr_[i];
			ma[i] = ma_[i];
		}
		ma[n] = true;
		fill(visited, visited+10, false);
		change(n);
		ret = max(ret, solve(n+1));
		for(int i=0;i<N;i++){
			pr[i] = pr_[i];
			ma[i] = ma_[i];
		}
		return ret;
	}
	int maxMagicalGirls(vector <string> love){
		N = love.size();
		for(int i=0;i<N;i++){
			for(int j=0;j<N;j++)
				lv[i][j] = (love[i][j]=='Y');
		}
		fill(pr,pr+10,false);
		fill(ma,ma+10,false);
		return solve(0);
	}
};