洛谷 2430 嚴酷的訓練

2022-05-26 08:42:09 字數 1608 閱讀 4238

lj的朋友wky是一名神奇的少年,在同齡人之中有著極高的地位。。。

他的老師老王對他的程式水平讚嘆不已,於是下決心培養這名小子。

老王的訓練方式很奇怪,他會一口氣讓wky做很多道題,要求他在規定的時間完成。而老王為了讓自己的威信提高,自己也會把這些題都做一遍。

wky和老王都有乙個水平值,他們水平值的比值和做這些題所用時間的比值成反比。比如如果wky的水平值是1,老王的水平值是2,那麼wky做同一道題的時間就是老王的2倍。

每個題目有他所屬的知識點,這我們都知道,比如遞迴,動歸,最短路,網路流。在這裡我們不考慮這些事情,我們只知道他們分別是知識點1,知識點2……每乙個知識點有他對應的難度,比如動態規劃經常難於模擬。

而每乙個同一知識點下的題目,對於wky來講,都是一樣難的。而做出每一道題,老王都有其獨特的獎勵值。而獎勵值和題目的知識點沒有必然聯絡。

現在wky同學請你幫忙,計算在老王規定的時間內,wky所能得到最大獎勵值是多少 。

輸入格式:

輸入檔案包括以下內容:

第一行:

wky的水平值和老王的水平值。

資料保證wky的水平值小於老王的水平值(哪怕它不現實),且老王的水平值是wky的水平值的整數倍。

第二行:

題目的總數m和知識點的總數n。

第三行:

n個整數。第i個整數表示 老王在做第i個知識點的題目所需的時間。

接下來有m行數每一行包括兩個整數p,q。p表示該題目所屬的知識點,q表示該題目對應的獎勵值。

最後一行是規定的時間。

輸出格式:

輸出檔案只有一行,表示能到得到的最大獎勵值。

輸入樣例#1: 複製

1 2

6 41 2 3 4

1 52 6

3 34 8

3 34 5

20

輸出樣例#1: 複製

22

對於100%的資料,題目總數<=5000,規定時間<=5000

題解:揹包問題:

f[j]=max(f[j],f[j-t[fu[i]]]+value[i]);    

//

luogu-judger-enable-o2

#include#include

#include

#include

#include

#include

typedef

long

long

ll;using

namespace

std;

int t[5005],fu[5005],value[5005],f[5005

];int

s1,s2,m,n,tt;

intmain()

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

cin>>fu[i]>>value[i];

cin>>tt;

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

for (int j=tt;j>=t[fu[i]];j--)

f[j]=max(f[j],f[j-t[fu[i]]]+value[i]);

cout

0;

洛谷p2430 嚴酷的訓練

這個題有乙個很神奇的地方 嚴酷的訓練 傳送門 演算法標籤 顯然01揹包了最近一直在練 他居然沒寫 這個題啊,試了好幾遍沒a 最後發現在第二層迴圈的時候應該是j rqyt p i 而不是j rqyt i 因為時間t要大於的是做這個題所需要的時間 在下面迴圈想到上面沒想到 ac include incl...

洛谷 P2430 嚴酷的訓練

lj的朋友wky是一名神奇的少年,在同齡人之中有著極高的地位。他的老師老王對他的程式水平讚嘆不已,於是下決心培養這名小子。老王的訓練方式很奇怪,他會一口氣讓wky做很多道題,要求他在規定的時間完成。而老王為了讓自己的威信提高,自己也會把這些題都做一遍。wky和老王都有乙個水平值,他們水平值的比值和做...

洛谷 P2430 嚴酷的訓練

lj的朋友wky是一名神奇的少年,在同齡人之中有著極高的地位。他的老師老王對他的程式水平讚嘆不已,於是下決心培養這名小子。老王的訓練方式很奇怪,他會一口氣讓wky做很多道題,要求他在規定的時間完成。而老王為了讓自己的威信提高,自己也會把這些題都做一遍。wky和老王都有乙個水平值,他們水平值的比值和做...