題幹:
眾所周知,在各種對抗類遊戲裡裝備都是很重要的一環,不同的出裝方案會給玩家帶來不同的強度。
dalao手裡有n件裝備,現在dalao要把裝備分給n個隊友,每個隊友只能分一件裝備,而每個隊友穿上不同的裝備會有不同程度的強度提公升。
現在給出每個隊友對每件裝備的強度提公升的值,請問dalao的所有分配方案裡,最多能讓團隊的總強度提公升多少呢?
第一行有乙個整數t,表示資料的組數(不會超過150組)每組資料第一行包含乙個整數n,接下來會有n行,每行有n個整數,其中第 a 行的第 b 個數字表示第 a 個隊友穿上第 b 件裝備的強度提公升。任何隊員穿任何裝備的強度提公升都不會超過20000。
對於每組資料在一行內輸出乙個整數表示強度能夠提公升的最大值示例1複製
2複製41 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
31 3 5
2 4 6
7 9 11
34解題報告:16
不難發現其實就是個二分最優匹配,可以選擇km演算法或者費用流來解決這個問題。
ac**:
#include#include#include#include#include#include#include#include#include#include#define ll long long
using namespace std;
const int maxn = 70000;
const int maxm = 100005;
const int inf = 0x3f3f3f3f;
struct edge edge[maxm];
int head[maxn],tol;
int pre[maxn],dis[maxn];
bool vis[maxn];
int n;
void init(int n)
void addedge(int u,int v,int cap,int cost)
bool spfa(int s,int t)
dis[s] = 0;
vis[s] = true;
q.push(s);
while(!q.empty())
}} }
if(pre[t] ==-1)return false;
else return true;
}int mincostmaxflow(int s,int t,int &cost)
for(int i = pre[t]; i !=-1; i = pre[edge[i^1].to])
flow += min;
} return flow;
}int main()
} for(int i = 1; i<=n; i++) addedge(st,i,1,0);
for(int i = n+1; i<=2*n; i++) addedge(i,ed,1,0);
int cost;
int ans = mincostmaxflow(st,ed,cost);
printf("%d\n",-cost);
} return 0 ;
}
牛客 F日期小能手
題目鏈結 這道題,思路就是找到6.1,和5.1是週幾,然後再把日期加上去,想法是直接暴算,但是因為我又菜又懶,就放棄了這個題,後來補題的時候,看到大佬的 有公式可以計算某一天日期是週幾,並且,可以先進行預處理這樣更方便了,偷學了一手,確實,有奇效。這裡留一下大佬的 以便日後參考和學習 include...
牛客 283E 貪心只能過樣例(模擬)
題幹 小西是單身狗,所以她不喜歡看到有cp在秀恩愛!有一天,小西出來閒逛,發現街上的行人都排成了一排,並且可以用這種形式表示 mmfmmfffmmm 其中m表示男孩子,f表示 的男孩子 小西想讓所有的cp都消失!小西可以把任意一對 mf 或者 fm 趕走並變為乙個真正的小姐姐 j 例如上述的例子可以...
牛客練習賽58 F
求帶單點修改的樹上兩點間任意子路徑長異或和。路徑長等於路徑上所有異或和。簡單模擬一下,可以發現。奇數情況下,答案是偶數點異或和。偶數情況下,就是正常的異或和。偶數點異或和也很容易處理。分深度奇偶樹狀陣列即可。但是這是對於鏈的,不能直接dfs dfsdf s序,需要剖分一下。但是我不會,所以去學了一下...