20180809 提高Day3 訓練賽

2022-08-20 23:36:13 字數 2823 閱讀 4306

有 $n$ 名學生參加軍訓,軍訓的一大重要內容就是走佇列,而乙個佇列的不整齊程度是該隊中最高的學生的身高與最矮的學生的身高差值的平方。

現在要將 $n$ 名參加軍訓的學生分成 $k$ 個佇列,每個佇列的人數可以是任意非負整數。在安排佇列時希望所有佇列的不整齊度之和盡量小,請問不整齊度之和最小可以是多少?

對於所有的資料,$1\leq n,k\leq 500,0\leq \text\leq 200$。

動態規劃。我們將高度排序,然後把劃分佇列轉化為插板,考慮 $dp[i][j]$ 表示用了 $i$ 塊板,最後一塊板插在 $j$ 的位置,然後我們就有了乙個 $\mathcal o(kn^2)$的做法。

考慮兩個相同身高的人,他們一定可以放在同乙個佇列中而不會增加代價。

於是,我們去重,然後我們判斷 $k\geq n$ 的情況,只要輸出 $0$ 就可以了。

這樣,$n$ 一定 $\le k$,這樣我們就有了乙個 $\mathcal o(k^3)$ 的做法。

#include #define down(x, y) x = min(x, y)

using

namespace

std;

#define int long long

int a[505], f[505][505

];signed main()

memset(f,

0x3f, sizeof

(f));

f[0][0] = 0

;

for (int i=1; i<=n; i++) f[1][i] = (a[i]-a[1]) * (a[i]-a[1

]);

for (int i=2; i)

for (int j=1; j<=n; j++)

for (int l=0; l)

int ans=1e9;

for (int j=0; j)

ans = min(ans, f[k-1][j] + (a[n]-a[j+1])*(a[n]-a[j+1

]));

ans = min(ans, f[k-1

][n]);

printf(

"%lld\n

", ans);

return0;

}

現在有乙個多項式$f(x)=\sum_^b_ix^i$,對於給定的正整數 $a$,求$s(n)=\sum_^a^kf(k)$ 。

輸出答案 $\bmod 10^9+7$ 。

對於 $100\%$ 的資料,$n\leq 10^9,m\leq 100$。

請移步 `soj`。(注:`soj` 上面的題解是錯的)

#include using

namespace

std;

typedef

long

long

ll;const ll p = 1000000007

;ll powermod(ll x, ll y, ll p)

struct

int

int(ll y) : x(y %p) {}

int

operator+(const int & res) const

int

operator-(const int & res) const

int

operator*(const int & res) const

int

operator^(const int & res) const

int

operator/(const int & res) const

friend int

operator+(ll x, const int& y)

friend int

operator-(ll x, const int& y)

friend int

operator*(ll x, const int& y)

friend int

operator/(ll x, const int& y)

friend int

operator^(ll x, const int& y)

};int a[

1005], b[1005], s[1005], ss[1005], frac[1005

], n, m, a;

int s[

1005][1005

];inline int c(int a, int b)

intmain()

s[0][0] = 1

;

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

frac[

0] = 1

;

for (int i=1; i<=m; i++) frac[i] = frac[i-1] *i;

int ans;

for (int i=0; i<=m; i++)

}ss[

0] = 1

;

for (int i=0; i<=m; i++) ss[i+1] = ss[i]*(n+i+1)/(i+1

);

if (a == 1

) else

for (int i=0; i<=m; i++) /*

printf("s[%d] is %lld\n", i, s[i].x),

*/ans = ans + b[i] *s[i];

printf(

"%lld\n

", ans.x);

return0;

}

Day3實訓筆記

上午老是帶領答加學習前端,雖然前端我也學過一些東西,但是實訓老師所涉及到的知識點那都是我們書本上可以說是不曾見過的東西。還有一些快捷鍵我們也不太了解,有時候老師講的一句話我要理解好一會兒才能想起來。哦,好像是這麼回事兒!先把學習的知識羅列下吧。上午 1 提供給我們幾個 學習 1.1 元件 這是前端經...

蘇嵌暑期實訓 day3

姓名 祝俊寶 日期 2018.07.11 今日學習任務 學習指標 1 指標定義 2 指標運算 3 指標使用步驟 4 指標陣列 等等今日任務完成情況 基本 練習均完成,但指標概念有點抽象,有幾個稍複雜的習題還未解決,如字串逆序輸 出,字元排序等。今日開發中遇到的問題彙總 在對指標的使用過程中,常出現野...

嵌入式實訓DAY3

對c語言各個版本標準的整理 c90 1 增加了真正的標準庫 2 新的預處理命令與特性 3 函式原型允許在函式申明中 4 指定引數型別一些新的關鍵字,包括 const volatile 與 signed 5 寬字元 寬字串與多位元組字元 6 對約定規則 宣告和型別檢查的許多小改動與澄清 c99 1 增...