time limit: 1000ms memory limit: 65536k
現在有n個人,編號從1到n ,每個人有乙個 人品值
這是乙個赤裸裸的金錢關係的世界
如果小白想要小黑直接幫他乙個忙,他需要支付的代價為 abs(小白的人品 - 小黑的人品)。
小白也可以找小金,然後小金去拜託小黑幫他,這樣他就要支付雙份的代價,具體的,代價為
abs(小白的人品 - 小金的人品)+abs(小金的人品 - 小黑的人品)
小白還可以找多個人幫忙,不妨記為小a,小b,小c...小z這樣他要支付多份代價
abs(小白的人品 - 小a的人品)+abs(小a的人品 - 小b的人品)+...+abs(小z的人品 - 小黑的人品)
現在問題來了,小白最少要支付多少代價才能獲得小黑的幫助
多組輸入直到檔案結束(eof)
乙個數n代表現在有n個人(2<=n<=1000)
接下來n個整數ai代表第i個人的人品值(0<= ai <=100)
為了方便起見,我們假設小白的標號為1,小黑的編號為n
小白要支付的代價
51 1 1 1 4
31 2 3
32
abs(x) 是絕對值
「師創盃」山東理工大學第八屆acm程式設計競賽
這道題那叫乙個恨啊,這是校賽的第二題,其實就是簡單的貪心,但是我先想到的卻是dfs,結果沒注意複雜度tle更是一臉懵逼qaq,之後一大半時間沒跳出深搜的坑,直到最後的十分鐘才猛然驚醒,測試都沒測試交上去就a了,唉~還是太年輕啊,這題別人都很快就做出來了,rank1更是2分鐘就解出來了,怎麼說呢,這次校賽出的題確實不咋地啊,基本沒啥太大的難度梯度,就rank1做了8道,其餘基本就是7道了,而且沒有涉及集訓的資料結構和演算法但是我老是往那想,最後解了6題rank40得了個二等獎。。。權當一次教訓吧,不能再止步不前了,現在到暑假這段期間接著資料結構,暑假集訓進軍c++
先是dfs**:
#include
#include
#include
#include
using
namespace
std;
bool
vis[1000+5];
intn, a[1000+5], m;
intabs(
intx,
inty)
void
dfs(
intcur,
intans)
for(int
i=1;i<=n;i++)
} return
; }
intmain()
return
0;
} 交上發現14級的幾位學長學姐也是tle,估計也是陷進了dfs了。。。
然後是貪心,想到貪心估計這題也就出來了,**很簡單:
#include
#include
#include
#include
using
namespace
std;
intn, a[1000+5];
intabs(
intx,
inty)
intmain()
} printf("%d\n"
, ans);
} return
0;
}
經典貪心演算法 貪心演算法概述
貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...
小白高階之貪心演算法 赫夫曼編碼
赫夫曼編碼是根據字元的使用頻率對字元進行編碼的一種編碼方法,其用於壓縮資料的效果非常好。一般用二叉樹表示赫夫曼編碼,使用頻率越低的字元,其深度越大。其中q表示乙個按頻率從小到大排序的優先佇列。在赫夫曼編碼的表示中,通常用字首碼的表達方法。字首碼即沒有任何碼字是其他碼字的字首,其作用是簡化解碼過程。用...
演算法 貪心演算法
把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...