最大值 紀中1857 dp

2021-07-16 15:03:17 字數 1272 閱讀 6131

找到乙個陣列的最大值的一種方法是從陣列開頭從前到後對陣列進行掃瞄,令max=a0,如果a[i]>max,就更新max,這樣就可以在o(n)的時間裡找到乙個陣列的最大值。

這個問題是相當簡單的,但是想到了另乙個問題,如果乙個包含n個元素的陣列a裡面的元素的值是在1…k之間的整數,存在多少個不同的陣列a,進行了如上掃瞄之後,max恰好進行了p次更新?

下面是n = 4,k = 3,p = 2時所有情況

1)

2)

3)

4)

5)

6)

共有6種情況

由於答案可能很大,所以你僅僅需要把答案mod (10^9+7)輸出。

輸入檔案findmax.in的第一行t,本題有t組資料。

接下來t行,每行三個整數n,k,p

輸出檔案findmax.out包括t行,每行乙個答案。

30%資料 t=1;1 <= n <= 10;1 <= k <= 2;0 <= p < n

60%資料 t=1;1 <= n <= 50;1 <= k <= 10;0 <= p < n

100%資料1 <= t <= 100;1 <= n <= 100;1 <= k <= 300;0 <= p < n

正解是dp然而並沒有做出來,f[

i][j

][k]

表示前i項最大值為j且更新了k次的方案數, f[

i][j

][k]

=f[i

][j]

[k]+

f[i−

1][j

][k]

∗j+∑

j−1v

=1f[

i][v

][k−

1]

轉移可以用字首和加速,mod1000000007是個坑我也跳進去了;-b

#include 

using

namespace

std;

long

long f[101][301][101];

long

long sum[101][301][101];

int g=1000000007;

int main()

for (int i=2;i<=n;i++)

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

}int t;

scanf("%d",&t);

while (t--)

return

0;}

ZPG TEST 118 最大值 dp 離線

題4最大值 findmax 題目描述 找到乙個陣列的最大值的一種方法是從陣列開頭從前到後對陣列進行掃瞄,令max a 0 陣列下表從0.n 1 如果a i max,就更新max,這樣就可以在o n 的時間裡找到乙個陣列的最大值。這個問題是相當簡單的,但是想到了另乙個問題,如果乙個包含n個元素的陣列a...

MySQL 中 int 最大值

前兩天看到的問題,展開寫一下。我們都知道計算機是以二進位制為基礎。儲存的基本單位是bit,也稱為位元 二進位制位。1bit 可以表示 0 或者 1 兩個數字,是可能存在的最小的資訊量,任何小於1 bit 的內容都算不上資訊。複雜的內容就要用多 bit 來表示。byte,也稱為位元組,通常用作計量單位...

MaLab中求矩陣最大值

max函式和min函式 在matlab中,max和min函式分別能求一維的最大值和一維的最小值 如果想求二維矩陣x的最大值,可用max max x 這裡不是特別明白,有時間的話找高人問一下 a rand 4,5 取隨機數,也可以像你那樣input手工輸入。m,ind max a 最大值及其索引,a ...