大型補檔計畫
題目鏈結
看到分成兩組,想到二分圖判定 + 染色。
二分圖的特點是兩個有矛盾的點連一條邊,考慮在這道題中,如果 \(a, b\) 中有乙個人不認識對方(或者兩個人互不認識),就不可能分在一組,可以在 \((a, b)\) 連一條無向邊。
但是由於圖不連通,每個聯通塊染色跑出兩種顏色的數量 \(c_1, c_2\) 後(跑不出來無解),讓兩隊數量接近,等價於讓一隊的數量 $ <= \frac$ 且最大,我們可以把這兩個當做一組,把 \(cnt\) 個聯通塊當做物品,做分組揹包選出一隊的人員(並且強制選擇),因為答案輸出任意一組方案,倒序遞推出答案即可。
切忌強制轉移!因為不強制轉移可能出現一組都不選,而題目要求每個隊員必須在一隊(會 wa 53)
#include #include #include #include using namespace std;
const int n = 105;
int n, c1, c2, cnt, col[n], vis[n];
int f[n][n], a[n][n], b[n][n], d[n];
vectorans[2];
bool g[n][n];
bool dfs(int u, int t, int c) else if(col[v] == c) return false;
} }
return true;
}void work(int i, int j)
int main()
} int v = n >> 1;
for (int i = 1; i <= n; i++)
for (int j = v; j >= 0; j--)
if (j >= c2 && f[cnt - 1][j - c2] + c2 >= f[cnt][j])
}} }
int res = 0, t = -1;
for (int i = 0; i <= v; i++)
if (f[cnt][i] > res) res = f[cnt][i], t = i;
work(cnt, t);
for (int i = 1; i <= n; i++)
for (int i = 0; i < 2; i++)
return 0;
}
AcWing 40 順時針列印矩陣
題目描述 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。樣例輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10,9,5,6,7 分析 方法一 首先當模擬題暴力模擬一遍,鍛鍊下思維。class solution i j while i...
AcWing 日期問題
小明正在整理一批歷史文獻。這些歷史文獻 現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有採用年 月 日的,有採用月 日 年的,還有採用日 月 年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的乙個日期,存在很多可能的日...
AcWing 小貓爬山
翰翰和達達飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 翰翰和達達只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1 c2 cn。當然,每輛纜車上的小貓的重量之和不能超過w。每租用一輛纜車,翰翰和達...