。
分析:
用dfs枚举每一波攻击的三个国家。
很暴力,但没想到0ms。
#include#include #include using namespace std;const int maxn = 20;int p[maxn], nervous[maxn], n, m, k, max_cnt;int att[110][3];void dfs(int cn) { //界限 if(max_cnt >= k) return ; if(cn >= k) { max_cnt = k; return ; } int a[3], bak[3]; for(int v=0; v<3; v++) { //枚举支援的国家 /* * 被支援的国家为 att[cn][v] * 其他两个国家为 att[cn][(v+1)%3] 和 att[cn][(v+2)%3] */ a[0] = att[cn][v]; //将国家序号存起来,方便调用 a[1] = att[cn][(v+1)%3]; a[2] = att[cn][(v+2)%3]; bak[0] = nervous[a[0]]; //备份 bak[1] = nervous[a[1]]; bak[2] = nervous[a[2]]; nervous[a[0]] -= 2; if(nervous[a[0]] < 1) nervous[a[0]] = 1; nervous[a[1]] += 2; nervous[a[2]] += 2; //数据已经保证受攻击的3个国家一定在不同的洲 for(int i=0; i 5) { max_cnt = max(max_cnt, cn); flag = false; } } if(flag) dfs(cn+1); //还原 for(int i=0; i