題目:標籤:貪心、高精、排序
【題解】
參考dalao的推導過程:
有中間兩個人 i 和 i+1,顯然他們倆怎麼排對後面沒有影響(因為只跟乘積有關)
記 p 為國王到 i-1 個人的 左手數的乘積
所以若不換的話,顯然 max < max
–> 否則換更優
即不換的最大值《換的最大值
兩邊都除以p得 max < max
兩邊同時乘以b[i]*b[i+1]得 max < max
顯然 顯然a[i]*b[i]>b[i],所以 max < a[i+1]*b[i+1]
(因為無論哪個左邊的數都大於b[i])
同理因為 a[i]*b[i]>b[i] 所以原式為 a[i]*b[i]接下來就是處理高精度了。
muti( ) 是處理高精度乘法,處理某個大臣前面的所有人左手上的數的乘積。
div( ) 是處理高精度除法,處理某個大臣前面的所有人左手上的數的乘積,除以他自己右手上的數,然後向下取整得到的結果。
compare( ) 是比較 div( ) 處理後的結果和當前的最大值。
ac**:
#include
#include
#include
using
namespace std;
struct nodes
node[
1005];
//sum儲存當前的高精度,max儲存最大的高精度,temp儲存除后的臨時高精度
int sum[
10005]=
, max[
10005
], temp[
10005];
//lsum是sum的長度,ltemp是temp的長度,lmax是max的長度。
int lsum =
1, ltemp, lmax =0;
bool
cmp(nodes a, nodes b)
void
muti
(int d)
while
(t !=0)
}void
div(
int d)
while
(ltemp >
1&& temp[ltemp -1]
==0) ltemp--;}
void
compare()
else
if(ltemp == lmax)}}
intmain()
for(
int i = lmax-
1; i >=
0; i--
) cout << max[i]
;return0;
}
洛谷P1080 國王遊戲 貪心 高精度
p1080 國王遊戲 啊啊啊,剛才已經寫了一次了,但是edge瀏覽器不知道為什麼卡住了,難受。好吧,其實是一道可做題,分析得到的貪心策略就是就是將a b小的放在前面 其他的懶得說了 主要還是要會高精度,要不然寫不出來。ac 借鑑題解大佬的,我自己寫不出來,主要是高精度不太會 include incl...
洛谷 P1080 國王遊戲
原題 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前...
洛谷P1080 國王遊戲
洛谷p1080 國王遊戲 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數...