2011中國國家集訓隊命題答辯
高一一班的座位表是個n*m的矩陣,經過乙個學期的相處,每個同學和前後左右相鄰的同學互相成為了好朋友。這學期要分文理科了,每個同學對於選擇文科與理科有著自己的喜悅值,而一對好朋友如果能同時選文科或者理科,那麼他們又將收穫一些喜悅值。作為計算機競賽教練的scp大老闆,想知道如何分配可以使得全班的喜悅值總和最大。
第一行兩個正整數n,m。
接下來是六個矩陣
第乙個矩陣為n行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學選擇文科獲得的喜悅值。
第二個矩陣為n行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學選擇理科獲得的喜悅值。
第三個矩陣為n-1行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i+1行第j列的同學同時選擇文科獲得的額外喜悅值。
第四個矩陣為n-1行m列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i+1行第j列的同學同時選擇理科獲得的額外喜悅值。
第五個矩陣為n行m-1列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i行第j+1列的同學同時選擇文科獲得的額外喜悅值。
第六個矩陣為n行m-1列 此矩陣的第i行第j列的數字表示座位在第i行第j列的同學與第i行第j+1列的同學同時選擇理科獲得的額外喜悅值。
輸出乙個整數,表示喜悅值總和的最大值
1 21 1
100 110
11000
1210
兩人都選理,則獲得100+110+1000的喜悅值。
對於10%以內的資料,n,m<=4
對於30%以內的資料,n,m<=8
對於100%以內的資料,n,m<=100 資料保證答案在2^30以內
對於100%的資料,時間限制為0.5s。
【題解】
這道題的難點在於確定邊權。最小割問題,割去的就是我們失去的部分;兩點之間有關係,總是通過建邊來實現的。對於這道題來說,每種情況我們都失去了什麼?以源點代表文科,匯點代表理科。都選一科(三角環),失去了共同選另一科和分別選另一科的喜悅值。分別選兩科(二字形),失去了兩個共同喜悅值和兩個單獨選另一科的喜悅值。(可以證明可能出現的情況只有這兩種,否則都不會是最小割)相同位置的邊權構成一定相同,因此用數學方法推出每個人到源點或匯點的邊權為個人喜悅值+1/2共同喜悅值,兩點之間邊權為1/2都選文+1/2都選理。注意共同邊要雙向建邊,因為兩點之間是完全等效的;每個人向源點和匯點的邊應該在邊權全部處理完之後再統一新增。
可以發現邊權會出現實型,結果卻一定是整型。對於這種情況,可以把邊權全部*2,最後結果再/2來避免double的麻煩。dfs函式中有乙個語句:if(!f) break;原先從來沒打過,這道題不加這個卻會超時,加了之後直接上榜,確實是乙個非常有理有據的優化。
#include#include#include
#include
using
namespace
std;
const
int sj=105
;int n,m,sx[sj][sj],e,h[sj*sj],s,t,dep[sj*sj];
intw[sj][sj],l[sj][sj],g[sj][sj],z[sj][sj],a1,ans;
struct
bb[sj*sj*10
];queue
q;void add(int x,int y,int
z)void
init()
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int i=1;i)
for(int j=1;j<=m;j++)
for(int i=1;i)
for(int j=1;j<=m;j++)
for(int i=1;i<=n;i++)
for(int j=1;j)
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
for(int j=1;j)
for(int i=1;i<=n;i++)
ans*=2;}
bool bfs(int
x) }
return0;
}int bj(int x,int
y)int dfs(int x,int
f)
if(!ans) dep[x]=-1
;
return
ans;
}int
main()
國家集訓隊 旅遊
題目背景 ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 nn 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心...
國家集訓隊 Tree I
題目 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有nee dneed need 條白色邊的生成樹。題目保證有解。思路 凸優化裸題,要注意的就是,優先選白色 優先選黑色也行 主要是同一斜率可能會切到很多點,那麼就要有乙個標準,要麼選最小點,要麼選最大。另外求出來的點不一定是ne...
國家集訓隊 旅遊
ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹...