トピックリンク:
https://ac.nowcoder.com/acm/problem/15832
効果の件名:
翻訳、各衝突は二つのうちの一つが、2はなくなっているではない、消えていることに注意してください
具体的なアイデア:
DP [i]はiがサイクルの列挙のためのトリプルでどのくらいのエネルギー最大の状態を表しています
ACコード:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3位LL定義長い 長い 4位INF定義0x3f3f3f3f 5位LL_infを定義する(1LL << 60 ) 6 のconst int型 MAXN = 2E5 + 100 。 7 INTの DP [ 1024 + 100 ]。 8 INT [ 15 ] [ 15 ]。 9 のint main()の 10 { 11 INT N。 12 しばらく(〜のscanf(" %のD "、&N)&& N) 13 { 14 のmemset(DP、0、はsizeof (DP))。 15 のために(int型 I = 0 ; iがN <; Iは++ ) 16 { 17 のために(INT J = 0 ; J <N; J ++ ) 18 { 19 のscanf(" %dの"、および[I] [J])。 20 } 21 } 22 INT maxstate =(1<< N) - 1 。 23 INT MAXX = 0 。 24 のために(int型 I = 0 ; I <= maxstate; iが++ ) 25 { 26 のために(INT J = 0 ; J <N; J ++ ) 27 { 28 のための(int型のk = 0、N <Kあり、k ++ ) 29 { 30 もし(K == j)は 31 続けます。 32 であれば((I&(1 << J))== 0&&(I&(1 << K))== 0 ) 33 、DP [I ^(1 << J)= MAX(DP [iは^(1 << J)]、DP [I] + [K] [J])。 34 MAXX = MAX(MAXX、DP [I ^(1 << J)])。 35 } 36 } 37 } 38 のprintf(" %d個の\ n " 、MAXX)。 39 } 40 リターン 0 。 41 }
ACMのキャリアは、この終わりにする必要があります