居民集會 第六屆藍翔杯決賽題

2021-07-12 01:03:31 字數 1586 閱讀 8618

居民集會

藍橋村的居民都生活在一條公路的邊上,公路的長度為l,每戶家庭的位置都用這戶家庭到公路的起點的距離來計算,第i戶家庭距起點的距離為di。

每年,藍橋村都要舉行一次集會。今年,由於村里的人口太多,村委會決定要在4個地方舉行集會,其中3個位於公路中間,1個位最公路的終點。

已知每戶家庭都會向著遠離公路起點的方向去參加集會,參加集會的路程開銷為家庭內的人數ti與距離的乘積。

給定每戶家庭的位置di和人數ti,請為村委會尋找最好的集會舉辦地:p1, p2, p3, p4 (p1<=p2<=p3<=p4=l),使得村內所有人的路程開銷和最小。

【輸入格式】

輸入的第一行包含兩個整數n, l,分別表示藍橋村的家庭數和公路長度。

接下來n行,每行兩個整數di, ti,分別表示第i戶家庭距離公路起點的距離和家庭中的人數。

【輸出格式】

輸出一行,包含乙個整數,表示村內所有人路程的開銷和。

【樣例輸入】

6 10

1 3

2 2

4 5

5 20

6 5

8 7

【樣例輸出】

18 【樣例說明】

在距起點2, 5, 8, 10這4個地方集會,6個家庭需要的走的距離分別為1, 0, 1, 0, 2, 0,總的路程開銷為1*3+0*2+1*5+0*20+2*5+0*7=18。

【資料規模與約定】

對於10%的評測資料,1<=n<=300。

對於30%的評測資料,1<=n<=2000,1<=l<=10000,0<=di<=l,di<=di+1,0<=ti<=20。

對於100%的評測資料,1<=n<=100000,1<=l<=1000000,0<=di<=l,di<=di+1,0<=ti<=1000000。

思路:dp[i][j]=min(dp[i-1][j]+sum[i-1][j]*(a[i]-a[i-1]),dp[i-1][j-1]); dp[i][j]到第i個家庭且i為第j個聚集點的最小開銷。為了準備下過幾天的藍翔杯做下去年的題,官網上也沒測題地方也不知道對不對。

詳細見**:

#include#include#include#include#include#include#includeusing namespace std;

#define inf 1.0e14;

const int maxn = 1e5+100;

typedef long long ll;

int a[maxn];

int b[maxn];

ll dp[maxn][4];

ll sum[maxn][4];

int main()

else if(i>j)

} ll ans=dp[n][0];

if(n>1)

ans=min(ans,dp[n][1]);

if(n>2)

ans=min(ans,dp[n][2]);

if(n>3)

ans=min(ans,dp[n][3]+sum[n][3]*(m-a[n]));

cout<

第六屆藍翔杯決賽 密文搜尋

密文搜尋 描述 福爾摩斯從x星收到乙份資料,全部是小寫字母組成。他的助手提供了另乙份資料 許多長度為8的密碼列表。福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。請你編寫乙個程式,從第乙份資料中搜尋可能隱藏密碼的位置。要考慮密碼的所有排列可能性。資料格式 輸入第一行 乙個字串s,全部由小寫字...

第六屆決賽真題

在2行5列的格仔中填入1到10的數字。要求 相鄰的格仔中的數,右邊的大於左邊的,下邊的大於上邊的。如 圖1.png 所示的2種,就是合格的填法。請你計算一共有多少種可能的方案。1.暴力解決 include include using namespace std int a 10 10個數準備重排列 ...

第六屆藍盾杯總結 12322766

9月17日,我和我的小隊成員張恒鵬,劉洪海,以及帶隊老師曲老師,參加了在山大軟體園舉辦的藍盾杯網路空間安全比賽,隊名 what戰隊。並且拿到了一等獎,超乎意料之外。本來我們只是奔著測驗一下我們的攻防策略而去的,嘿嘿!比賽一共分為兩個階段,第一階段為挑戰賽,答ctf題,第二階段為對抗賽,50個隊伍在乙...