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