jzoj數字遊戲 貪心 DP

2021-09-25 05:39:08 字數 996 閱讀 8033

>description

一行數字a1,a2,a3,……,an,有m個回合,每個回合必須從中選擇乙個數字擦去它,接著每個回合後剩下來的每個數字ai都要遞減乙個相應的值bi。如此重複m個回合,所有你擦去的數字之和就是你所得的分數。

給出n,m,a數列和b數列,求所得的最多的分數。

>input

輸入檔案的第一行是乙個整數n(1<=n<=2000),表示數字個數

第二行乙個整數m(1<=m<=n),表示回合數

接下來一行有n個不超過10000的正整數,a1,a2,a3,……,an表示原始序列,最後一行有n個不超過500的正整數,b1,b2,b3,……,bn,表示每回合每個數字遞減的值。

>output

輸出檔案只有乙個整數,表示最大的可能得分。

>sample input33

10 20 30

4 5 6

>sample output

47>解題思路

按照貪心思想,把a數列按照b數列從大到小排序,使選取的數中減去的值最小。

然後dp:f[i][j]表示前i個數選j個數(有j個回合)。

那麼有兩種情況:

1.選第i個數

2.不選第i個數

>**

#include

#include

#include

#include

using namespace std;

struct ooo

s[2005];

int n,m,f[

2005][

2005];

bool lil

(ooo aa,ooo bb)

int main()

JZOJ 數字遊戲 DP

小w發明了乙個遊戲,他在黑板上寫出了一行數字a1,a2,a3,an,然後給你m個回合的機會,每回合你可以從中選擇乙個數字擦去它,接著剩下來的每個數字ai都要遞減乙個值bi,即a1減掉b1,a2減掉b2,如此重複m個回合,所有你擦去的數字之和就是你所得的分數。小w和他的好朋友小y玩了這個遊戲,可是他發...

DP 數字遊戲(jzoj 2131)

有n個數,每個數有相應的a ia i ai 和b ib i bi 當選了乙個數後結果加上a ia i ai 其他數分別減去他們自己的a ja j aj 現在讓你選m個數,結果最大是多少 3 310 20 30 4 5 6471 m n 2000 1 leqslant m leqslant n leq...

jzoj4249 遊戲 貪心

0 n 0 sim n 0 n的點,從i ii移動到j jj獲得aj j i a j j i aj j i 的價值。求最大價值。考慮貪心,每次移動到往後a ia i ai 最大的點。證明 反證明 我們假設有一種情況i ij a jaj 但是之間移動到j jj比先移動到i ii更優。但是若我們先移動到...