描述 description
小x的王國中有乙個奇怪的監獄,這個監獄一共有p個牢房,這些牢房一字排開,第i個僅挨著第i+1個(最後乙個除外),當然第i個也挨著第i-1個(第乙個除外),現在牢房正好是滿員的。
上級下發了乙個釋放名單,要求每天釋放名單上的乙個人。這可把看守們嚇得不輕,因為看守們知道,現在牢房裡的p個人,可以相互之間傳話。第i個人可以把話傳給第i+1個,當然也能傳給第i-1個,並且犯人很樂意把訊息傳遞下去。
如果某個人離開了,那麼原來和這個人能說上話的人,都會很氣憤,導致他們那天會一直大吼大叫,搞得看守很頭疼。如果給這些要發火的人吃上肉,他們就會安靜下來。
為了河蟹社會,現在看守們想知道,如何安排釋放的順序,才能是的他們消耗的肉錢最少。
輸入格式 input format
第一行兩個數p和q,q表示釋放名單上的人數;
第二行q個數,表示要釋放哪些人。
輸出格式 output format
僅一行,表示最少要給多少人次送肉吃。
樣例輸入 sample input
20 3
3 6 14
樣例輸出 sample output
35樣例解釋: 先放14號犯人,給19個人肉吃,再放6號犯人,給12個人肉吃,最後放3號,給4個人肉吃,一共35個。
時間限制 time limitation
1s注釋 hint
【資料規模】
1<=p<=1000; 1<=q<=100.
q<=p,且 50%的資料 1<=p<=100;1<=q<=5;
** source
codejam
(還是得回來搞動規哇)
這道題就是乙個區間動態規劃的題,因為一共要放出來m個罪犯,但是沒放出來乙個罪犯後,能和這個罪犯說到話的人都會很生氣,所以必須要給他們吃肉。。。。。所以就用乙個陣列sun[i]來記錄釋放第i個罪犯前需要支付的肉之和,然後用f[i][j]表示釋放i到j中的罪犯最少需要多少肉,所以就可以知接在i到j中列舉出k,所以
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[j]-sum[i-1]+j-i-1);
//動規還是掌握的不好啊還得多寫點題
**如下:
#include#includeε(┬┬﹏┬┬)3#include
#include
#include
using
namespace
std;
int a[1100
];int f[1100][1100
];int sum[1110
];int
main()
sum[m+1]=n-a[m];
for(int i=1;i<=m+1;i++)
sum[i]=sum[i]+sum[i-1
]; f[
0][0]=0
; f[m+1][m+1]=0
;
for(int i=m+1;i>=1;i--)}}
cout
<1][m+1]<
return0;
}
P2051(動態規劃)
這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有乙個棋子。你也來和小可可一起鍛鍊一下思...
問題 P 動態規劃 收益
題目描述 建太空梯進入太空要1兆億?魔法學院的院長瞪大了眼睛。這只是基礎設施的費用,後期還要 墨老師掰著手指算。哎呀,現在地主也很窮啊,學院的錢批下來就這麼多,你想辦法用這筆錢在債券市場上獲得最大收益吧。院長皺著眉頭。簡單來說,就是你有一筆錢,你要將這筆錢去投資債券,現在有d種債券,每種債券都有乙個...
P1651 塔 動態規劃
輸入格式 第一行為乙個整數n,表示木塊個數。第二行是n個整數,表示n塊木塊的高度。資料規模 對於100 的資料,n 50,每塊木塊的高度h滿足1 h 500000,所有木塊的高度總和 500000。輸出格式 僅乙個整數,表示能搭建的塔的最大高度,若不能搭建兩座相同高度的塔,則輸出 1 輸入樣例 1 ...