bzoj4038 醫療援助

2022-06-03 11:24:08 字數 1593 閱讀 5058

乙隻帶著先進裝置和藥物的醫療團隊來到了埃博拉病毒疫區的某個非洲國家。這個國家有n個村莊,均坐落在該國唯一的一條公路旁,n個村莊依次標號為1,2,…n。第i個村莊有a_i個埃博拉感染者。

到來後的第一天早晨,醫療團隊在第1個村莊。每天他們可以選擇**所在村莊的村民,這樣所有感染者都會痊癒;他們也可以選擇前往相鄰的乙個村莊,路程需要1天。每天結束時,如果第i個村莊的a_i個感染者沒有痊癒,那麼他們會死去,同時會有另外a_i個人被感染。也就是說,如果第i個村莊沒有被**,那麼每天這個村莊會死去a_i個人。

醫療團隊在經過村莊i時,可能選擇不**這個村莊而前往下乙個村莊i+1。但為了不讓村民失去希望,如果醫療團隊在村莊j決定往回走時,則他們要**村莊j之前所有沒有被**的村莊,同時在返回的過程中,如果經過沒有接受**的村莊,他們需要停下來進行**。

醫療團隊最終會**所有村民。作為團隊的領導人,你需要得出在合理規劃行程下最少的死亡人數。

第一行為乙個正整數n,表示村莊的個數。接下來一行是n個正整數a_i(1<=a_i<=10^9),為每個村莊的感染人數

輸出乙個整數,表示在**所有村民前最少的死亡人數。

640 200 1 300 2

101950

100%的資料,n<=3000

題解:設g[i][j]表示從j開始走,走到i,然後回頭到j,i到j之間的村子的最小死亡人數

顯然g[i][i]=0

考慮j這個村子一開始是**還是被跳過

所以g[i][j]=g[i][j+1]+sum[j+1,i]+min((i-j)*3*a[j],sum[j+1,i])

然後設f[i]表示走到i,且前面的都治好了的情況下,總共的最小死亡人數

轉移就是列舉j,考慮從j+1出發到i,然後回頭到j+1,再回頭到i

即f[i]=min

複雜度o(n2)

ps:這也是jsoi2016r2d2t1

code:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 typedef long

long

int64;

8char

ch;9

bool

ok;10

void read(int &x)

15void read(int64 &x)

20const

int maxn=3005;21

intn;

22int64 a[maxn],sum[maxn],g[maxn][maxn],f[maxn];

23 inline int64 s(int l,int r)

24int

main()

32 memset(f,63,sizeof

(f));

33 f[0]=0;34

for (int i=1;i<=n;i++) for (int j=0;j1]+s(i+1,n)*(4ll*(i-j)-2

));35 printf("

%lld\n

",f[n]);

36return0;

37 }

403問題集錦

如果你是訪問乙個網頁出現這個問題 說明這個網頁是一般人是關閉的 禁止訪問的 你就不要看了 錯誤 403.1 403.1 錯誤是由於 執行 訪問被禁止而造成的,若試圖從目錄中執行 cgi isapi 或其他可執行程式,但該目錄不允許執行程式時便會出現此種錯誤。錯誤 403.2 403.2 錯誤是由於 ...

403 青蛙過河

乙隻青蛙想要過河。假定河流被等分為 x 個單元格,並且在每乙個單元格內都有可能放有一石子 也有可能沒有 青蛙可以跳上石頭,但是不可以跳入水中。給定石子的位置列表 用單元格序號公升序表示 請判定青蛙能否成功過河 即能否在最後一步跳至最後乙個石子上 開始時,青蛙預設已站在第乙個石子上,並可以假定它第一步...

403簡單繞過

403 forbidden 是http協議中的乙個狀態碼 status code 白話理解,沒有許可權訪問此站 該狀態表示伺服器處理了本次請求,但是拒絕執行該務 一般情況站點都是不會允許直接讀取目錄內容的。每當發現403頁面時,這意味著裡面有東西,我們只需要繞過它。繞過403禁止的技術有很多,但在這...