快餐店(IOI2000郵局)

2021-10-12 13:53:59 字數 1525 閱讀 1395

快餐店

題解:顯然這道題我們可以將n個加油站分為k段,那麼我們可以採用分段dp,用dp[i][j]表示將i個加油站分為j段的最小距離,即可得出轉移方程:

dp[i]

[parts]

=min

(dp[i]

[parts]

,dp[j]

[parts-1]

+dis[j+1]

[i])

而這裡我們需要預處理計算出i到j這段區間的最小距離,應當為中位數所在加油站

ioi2020:沒想到我竟然找到了原題!!!

但顯然,gg出的題資料範圍較小,正常dp就能過,但ioi中資料給到了3000,顯然超過了時間限制,所以要用四邊形不等式來優化一下 (雖然我也不會)

四邊形不等式:

**:

#include

using

namespace std;

int n,k,a[

3005

],dp[

3005][

3005

],dis[

3005][

3005];

intmain()

dp[i][1

]=dis[1]

[i];

}for

(int parts=

2;parts<=k;parts++

)printf

("%d"

,dp[n]

[k])

;return0;

}/*ioi2020郵局

四邊形不等式(?)優化

#include#include#include#include#include#define gc getchar()

using namespace std;

const int p=305,n=3005;

inline void qr(int &x)

while(c>='0'&&c<='9')

x*=f;

}void qw(int x)

int f[n][p],s[n],a[n],p[n][p];

inline int calc(int l,int r)

int main()

{ int n,m;qr(n),qr(m);

for(int i=1;i<=n;i++)qr(a[i]),s[i]=s[i-1]+a[i];

memset(f,0x3f,sizeof(f));

for(int i=1;i<=n;i++)f[i][1]=calc(1,i);

for(int i=1;i<=m;i++)p[n][i]=1;

for(int j=2;j<=m;j++)

{ p[n+1][j]=n;int tmp=0x3f3f3f3f;

for(int i=n;i>=1;i--)

for(int k=p[i][j-1];k<=p[i+1][j];k++)

if((tmp=f[k][j-1]+calc(k+1,i))

快餐店選址指南 轉

店址的選擇,首要取決於自身專案的定位。快餐業有四大主要目標市場 上班族市場 學生市場 家庭組員市場 以家庭為消費單位 流動人口。金福祥營養快餐 定位強調為上班族 學生族 流動人員 逛街購物人員提供 快速 簡便 營養 美味 的用餐環境。同時,作為一種擁有中式傳統口味 清潔就餐環境 豐富產品線的快餐店,...

IOI2000 回文字串

題目 回文字串 題目描述 任意給定乙個字串,通過插入若干字元,都可以變成回文詞。此題要求出 將給定字串變成回文詞所需要插入的最少字元數。比如 ab3bd 插入2個字元後可以變成回文詞 dab3bad 或 adb3bda 但是插入少於2個的字元無法變成回文詞。注 此問題區分大小寫 輸入格式 乙個字串 ...

動態規劃 NOI2013 快餐店

第一行包含乙個整數n,表示城市c中的建築和道路數目。接下來n行,每行3個整數,ai,bi,li 1 i n li 0 表示一條道路連線了建築ai與bi,其長度為li 僅包含乙個實數,四捨五入保留恰好一位小數,表示最佳快餐店選址距離最遠使用者的距離。注意 你的結果必須恰好有一位小數,小數字數不正確不得...