#include #include #include #include #include #include #include #include #include using namespace std; /* 後ろからメモ化再帰 O( (2^N)^2 * N )っぽいのでTLE int dfs(vector &D, vector &dp, int &N, int state, int MAX_HP){ if(dp[state] >= 0) return dp[state]; //前の相手 for(int j=0; j> N; vector D(N); int max_HP=1; for(int i=0; i> D[i]; if(D[i] < 0) max_HP++; } vector dp(1< 0 && D[j] < 0) MAX_HP++; } //次の相手 for(int j=0; j 0) continue; //次の状態 int next_state = ( i | ( 1<