居民集會
藍橋村的居民都生活在一條公路的邊上,公路的長度為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個隊伍在乙...