題目鏈結
這題寫的一把辛酸淚,第一次用getchar()讀入,再加上很少用scanf()讀入字元,被輸入輸出緩衝安排的明明白白,最後放棄**,用cin,還是死活沒有輸出,最後才發現是因為for迴圈多加了一步,白被坑了有一天。
演算法分析:首先把每個男士加入佇列,讓每乙個沒配對的男士去向女士請求配對,如果女士沒有配偶,直接答應,如果有配偶,就將配偶的優先順序和當前男士的優先順序作比較,如果更喜歡當前的男士,就把配偶踢掉,重新和這個男士配對,被踢掉的男士重新加入佇列。
因為題目要求是有利於男士的配對,這樣配對可以保證男士的配偶都是能找到的最好的,女士的是能找到最差的。
如果想有利於女士的配對,直接把主動的換成女士就好。
總而言之,就是主動者得利。
具體證明可看這個博文:
1 #include2using
namespace
std;
3 typedef long
long
ll;4
int a[30],b[30],m_like[30][30],w_like[30][30],now[30],wife[30],husband[30
];5 queueq;
6void engage(int man,int
woman)
12 husband[woman]=man;
13 wife[man]=woman;14}
15int
main()
1630
for(int i=1;i<=n;i++)
34for(int i=0;i)//
將男士加入佇列,now陣列標記男士配對到第幾個女士了,注意j從2開始,所以now陣列也從2開始
41 q.push(ch-'
a');now[ch-'
a']=2,wife[ch-'
a']=-1;42
}43for(int i=0;i) husband[ch-'
a']=-1;50
}51while(!q.empty())
58for(int i=0;i)61}
62 }
穩定婚姻問題
穩定婚姻是組合數學裡面的乙個問題。問題大概是這樣 有乙個社團裡有n個女生和n個男生,每位女生按照她的偏愛程度將男生排序,同時每位男生也按照自己的偏愛程度將女生排序。然後將這n個女生和n個男生配成完備婚姻。如果存在兩位女生a和b,兩位男生a和b,使得a和a結婚,b和b結婚,但是a更偏愛b而不是a,b更...
穩定婚姻問題
著名的穩定婚姻問題是美國數學家 經濟學家lloyd stowell shapley 1923 提出的。下面介紹一下背景 某單位有n個姑娘w1,w2,wn和n個小伙m1,m2 mn。每位姑娘對所有小伙有乙個滿意度排序,每位小伙對所有姑娘也有一滿意度排序。m1 w2 w1 w3 w1 m1 m3 m2 ...
穩定婚姻匹配
要求按照書中 page 5 的 g s 演算法寫乙個匹配程式 由男方發起邀請 第一行資料表示 man woman 的數目 n 接下來的資料中,第乙個 n n 的資料塊表示 man 的優先列表 另乙個 n n 的資料塊表示 woman 的優先列表 5 man woman 的數目 n 2 1 4 5 3...