本蒟蒻的部落格:
有2n個人,任意兩個人之間有乙個競爭值,將這2n個人分成兩組,每組n個人,只有在不同組的兩人之間才計算他們的競爭值,問可以獲得的最大競爭值是多少。1≤n
≤14
1\leq n \leq 14
1≤n≤14
暴力列舉,一共有c
2814
=40116600
c_^=40116600
c2814
=401
1660
0種情況,在列舉的過程中,就可以算出競爭值,先預處理得到每乙個人到其他所有人的競爭值之和sum
[i
]sum[i]
sum[i]
,然後當乙個人被中時,將他與之前被選中的所有人的競爭值的兩倍減去就是他被選中之後提供的競爭值,為什麼要減去兩倍,是因為當他被選中時,他與之前被選中的人的競爭值都無法計算,這是一倍,然後之前選中的人與他的競爭值也無法計算,所以是兩倍
#include
#include
using
namespace std;
typedef
long
long ll;
#define wfor(i,j,k) for(i=j;i#define mfor(i,j,k) for(i=j;i>=k;--i)
// void read(ll &x)
ll val[28]
[28];
//兩兩間的競爭值
ll sum[28]
;//預處理的競爭值之和
ll res=0;
//答案
ll ch[14]
;//被選中的人
ll cnt;
void
dfs(ll now,ll chose,ll n,ll ans)
/**now是當前的人的編號,chose是已經選的人數,n是一共要選幾人,ans是競爭值
**/ ll temp=sum[now]
; ll i;
wfor
(i,0
,cnt)
//當被選中,便利之前選的人,減去之間的競爭值的兩倍
ch[cnt++
]=now;
dfs(now+
1,chose+
1,n,ans+temp)
; cnt--
;dfs
(now+
1,chose,n,ans);}
intmain()
}dfs(0
,0,n,0);
//dfs列舉
cout
}
2019牛客多校第二場
蒙特卡洛 猜答案 注意答案要累乘 最大的可以用rmq rmqrm q做然後挖掉四個角分別再做一次即可 掛一下大佬的鏈結 最重要的是學會了字首和查詢相差為1 11的時候的奇技淫巧 include include define fo i,a,b for i a i b i define fd i,a,b...
2019牛客多校第二場
乙個0到n 1的環,初始在0,每次隨機前進或後退一格,當所有點都訪問過就結束,問結束時站在k的概率是多少。注意輸出的是字首積 一開始站在0,最後顯然不可能在0,剩下n 1格,隨機數打表發現概率相同,都為 frac include using namespace std typedef long lo...
2019牛客多校第二場
upsloved 有乙個長為 n 的環,一開始位於 0 每次隨機向前或者向後走,求最後乙個走到 m 的概率 ps 這題實際上求的是所有詢問的字首積 實際上概率相等 俺也不知道為啥 如果 m 0 則概率是 frac 1 特判 n 1,m 0 就行了 不放了 solved at 03 54 2 有乙個無...