Formation Of Idol Unit

2 secs 1024 MB
Ang107's icon Ang107

愚直に実装することを考えると、NCM{}_N C_M通りを全探索し、「魅力度」の最大値を求めることになりそうです。しかし、その方針では TLE(実行時間制限超過)となり、正解することはできません。
そこで、MM の値で場合分けを行います。

  • M=1M = 1 のとき、愚直に求める O(NC1)=O(N)O({}_N C_1) = O(N) で正解できます。

  • M3M \geq 3 のとき、以下のように解くことができます。
    事務所に所属するアイドル全員の、「Vi」ステータスの集合を AllViAll_{Vi} 、「Da」ステータスの集合を AllDaAll_{Da} 、「Vo」ステータスの集合を AllVoAll_{Vo} としたとき、答えは max(AllVi)+max(AllDa)+max(AllVo)\mathrm{max}(All_{Vi}) + \mathrm{max}(All_{Da}) + \mathrm{max}(All_{Vo}) です。
    何故なら、33 人以上選べるとき、各ステータスの最大値を持つアイドルを採用することができるからです。これは、 O(N)O(N) で求められます。

  • M=2M = 2 のとき、以下のように解くことができます。
    二人のアイドルとして、i,ji,j 番目のアイドルを選んだとき、ユニットの「魅力度」は以下で表される式のいずれかになります。

    • Ai+Bi+CiA_i + B_i + C_i
    • Ai+Bi+CjA_i + B_i + C_j
    • Ai+Bj+CiA_i + B_j + C_i
    • Ai+Bj+CjA_i + B_j + C_j
    • Aj+Bi+CiA_j + B_i + C_i
    • Aj+Bi+CjA_j + B_i + C_j
    • Aj+Bj+CiA_j + B_j + C_i
    • Aj+Bj+CjA_j + B_j + C_j

    上のそれぞれの場合において、取りうる「魅力度」の最大値は O(N)O(N) で求めることができ、それらの最大値が答えになります。

よって、 O(N)O(N) で十分高速にこの問題に正解できます。

以下に Python の実装例を示します。