計蒜客NOIP模擬賽 小區劃分

2021-08-09 01:47:27 字數 974 閱讀 4031

題面

資料範圍不大,顯然的dp模型。狀態也很容易定出來:設f[

i][j

] 表示把前i個單元樓劃分成j個小區的最大擁擠程度。那麼有動規方程:f[

i][j

]=ma

x(f[

k][j

−1]+

abs(

(sum

a[i]

−sum

a[k]

)−(s

umb[

i]−s

umb[

k]))

) 時間複雜度o(

n2k)

。主要是注意小細節,要麼對f[

i][1

] 特殊處理,要麼先把初值全部賦為−i

nf再把f[

0][0

] 賦為0。這麼做是因為,f[

i][1

]實際上不存在什麼決策,一定就是ab

s(su

ma[i

]−su

mb[i

])。如果迴圈按照上面的方式進行就會出現問題,出現「有的單元樓沒有被分進小區」的情形。考試時就因為這個白白丟掉50分。

所以吸取教訓,dp時,如果不太影響**實現的複雜度,如果求最大值,最好一開始把初值都賦為−i

nf;如果求最小值,最好把初值都賦為in

f 。尤其要注意特殊情況的初值。

#include

#include

#define dd double

#define maxn 805

#define maxk 85

using namespace std;

int n,k;

dd a[maxn],b[maxn],f[maxn][maxk];

int main()

printf("%.6lf",f[n][k]);

}

計蒜客NOIP2018模擬1

t1 最失敗的一道題,其實就是道水題,好幾種寫法,一種都沒想出來。題意轉化後就是 每個數可以選a i 和a i k,最後求使1,2,3,t都存在的最大的t 1和最多能讓多少個數小於等於t。為什麼第一問可以轉化成求有多少個數小於等於t呢?首先不大於k的怪物可以直接殺死,然後大於k的怪物顯然當且僅當血量...

計蒜客藍橋杯模擬賽心得

1.有趣的數字 我們稱乙個數是質數,而且數字 現了 55 的數字是有趣的。例如 5,59,457 都是有趣的,而 15,7 不是。求 1 到 100000 中有趣的數的個數。思路 其實很簡單,1 判斷是否為素數 2 位數是否含有5 注意點 剛開始以為要總數減去1,就是15這個數,後來才發現15不是素...

計蒜客 劃分整數(dp)

劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nn n 分解成不多於 kk k 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1 n ...