題目描述
恰逢 h h國國慶,國王邀請 nn 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下乙個整數,國王自己也在左、右手上各寫乙個整數。然後,讓這 nn 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。
國王不希望某乙個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。注意,國王的位置始終在隊伍的最前面。
輸入輸出格式
輸入格式:
第一行包含乙個整數 nn,表示大臣的人數。
第二行包含兩個整數 aa和 bb,之間用乙個空格隔開,分別表示國王左手和右手上的整數。
接下來 n n行,每行包含兩個整數 aa 和 bb,之間用乙個空格隔開,分別表示每個大臣左手和右手上的整數。
輸出格式:
乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。
輸入輸出樣例
輸入樣例#1: 複製
31 1
2 37 4
4 6輸出樣例#1: 複製2說明
【輸入輸出樣例說明】
按 11、22、33 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 22;
按 11、33、22 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 22;
按 22、11、33 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 22;
按 22、33、1 1這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 99;
按 33、11、2 2這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 22;
按 33、22、11 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 99。
因此,獎賞最多的大臣最少獲得 2 2個金幣,答案輸出 22。
【資料範圍】
對於 20%的資料,有 1≤ n≤ 10,0 < a,b < 81≤n≤10,0對於 40%的資料,有 1≤ n≤20,0 < a,b < 81≤n≤20,0對於 60%的資料,有 1≤ n≤1001≤n≤100;
對於 60%的資料,保證答案不超過 10^9109;
對於 100%的資料,有 1 ≤ n ≤1,000,0 < a,b < 100001≤n≤1,000,0#include#include#include#includeusing namespace std;
int n,lens=1,lenm=1,lena=1;
int sum[10010]=,maxn[10010]=,ans[10010];
struct tmp
} while(ans[lena]==0) }
void max()
else if(lena==lenm)
for(int i=lenm;i>=1;i--)
cout } 恰逢 hh h國國慶,國王邀請n nn 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 nnn 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的... 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手... 傳送門 考慮任意乙個排隊方案,對於其中某兩個相鄰位置 i 0,j i 1 如果交換更優 那麼有 max a r i al i r j max a r j al j r i 其中 a prod l k l 0 是國王左手的數 因為 a r i al j r i a r j al i r j 分類討論一...P1080 國王遊戲
P1080 國王遊戲
P1080 國王遊戲