DP Cleaning Up 打掃衛生

2021-08-08 14:25:50 字數 1102 閱讀 1840

問題 a: cleaning up 打掃衛生

時間限制: 1 sec 記憶體限制: 128 mb

題目描述

[usaco2009 mar]cleaning up 打掃衛生

description

有n頭奶牛,每頭那牛都有乙個標號pi,1 <= pi <= m <= n <= 40000。現在farmer john要把這些奶牛分成若干段,定義每段的不河蟹度為:若這段裡有k個不同的數,那不河蟹度為k*k。那總的不河蟹度就是所有段的不河蟹度的總和。

input

第一行:兩個整數n,m

第2..n+1行:n個整數代表每個奶牛的編號

output

乙個整數,代表最小不河蟹度

sample input

13 4

1 2

1 3

2 2

3 4

3 4

3 1

4 sample output

11我承認我沒打正解。。正解n^1.5,我打了個假n^2.

對於f[i],應該是把j~i一段合併起來,f[i]=min(f[j-1]+s*s);

s為區間j~i中出現的個數。

剪枝:倒著找,s*s>i則直接跳出。

就這樣水過了。。。

#pragma gcc optimize("o3")

#include

#include

#include

#include

#include

#define n 40005

#define ll long long

using

namespace

std;

int read()

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

return sum*f;

}int n,m,tot,a[n],f[n];bool vis[n];

int main()

f[0]=0;

for(int i=1;i<=tot;i++)

//cout<}

cout

<}

P2943 Usaco2009 Mar 打掃衛生

神題一道 變數異常複雜,請在結合程式及注釋的情況下 根據題意不難看出,在選擇的一段區間內,最多有 n sqrt n 種不同的食物。據此設計dp陣列f i 表示i時的最小代價。設計輔助陣列pos j 表示最多選j種食物時區間左端點位置。思考 遍歷到i時,使區間食物種數不變應滿足什麼條件?得出 若上乙個...

打掃打掃的

關於ctreeview中ctreectrl空間的使用 2007 08 24 13 08 27 1.首先建立乙個 基於單文件 的mfc應用程式,在cmainframe類中過載oncreateclient 函式,其內部的 為 bool cmainframe oncreateclient lpcreate...

衛語句學習

1.使用衛語句取代巢狀表示式 函式中的條件邏輯使人難以看清正常的執行途徑。使用衛語句表現所有特殊情況。動機 條件表示式通常有2種表現形式。第一 所有分支都屬於正常行為。第二 條件表示式提供的答案中只有一種是正常行為,其他都是不常見的情況。這2類條件表示式有不同的用途。如果2條分支都是正常行為,就應該...