2019牛客暑期多校第二場F(爆搜)

2021-09-25 11:14:00 字數 1401 閱讀 1144

題意:就是給你2n個人 每個人之間都有競爭力,讓你組成兩個隊,使這兩個隊之間的所有成員競爭力和最大(本隊之間無競爭力)

題解:兩種解法:1.起始兩隊都為空,爆搜的時候每個人都往兩隊間放一次,算出隊內的成員競爭力最小時,隊外的競爭和一定最大。2.a隊先放乙個人,其他人都放b隊,預處理出第乙個人和其他所有人的競爭力和,再依次從b裡拿出乙個人往a裡放,減掉第乙個人和這個人的競爭力,加上這個人和其餘人的競爭力,知道a裡人湊滿n個人。

第一種解法:

#include#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int maxn=1000000;

typedef long long ll;

int n;

int tmp[50][50];

vectora,b;

ll tot=0;

ll ans=0;

ll na,nb;

void dfs(int x,ll sum)

if(x>=2*n) return;

if(a.size()>n||b.size()>n) return ;

if(a.size()>n;

for(int i=0;i<2*n;i++)

} dfs(0,tot/2);

cout《第二種

#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int maxn=1000000;

typedef long long ll;

int vis[50];

int tmp[50][50];

ll ans=0;

int n;

ll res=0;

void dfs(int x,int cnt,ll sum)

if(x>=2*n) return ;

if(x>cnt+n) return ;

ll cost=0;

//取

vis[x]=1;

for(int i=0;i<2*n;i++)else

} dfs(x+1,cnt+1,sum+cost);

//不取

vis[x]=0;

dfs(x+1,cnt,sum);

}int main()

} ll sum=0;

vis[0]=1;

for(int i=0;i<2*n;i++)

dfs(1,1,sum);

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 有乙個無...