01揹包問題,高階演算法課後題 是否能通過考試

2021-10-01 06:24:49 字數 1191 閱讀 2528

是否能通過考試

description

小張想要通過明天的考試。他知道考題的分值分布,也知道考試中要拿到每乙個題目需要耗費的時間。假設考試時長為h,共n個題目,需要拿到p分才能通過考試。現在已知每個考題的得分與耗時,請你判斷小張能否通過合理安排時間,而通過考試,並給出通過考試的最短時間。

input

輸入第一行為測試用例個數.每乙個用例有若干行,第一行為任務數量n、考試時常h、通過分數p,下面的n行是每乙個題目的耗時和得分。所有數值用空格分開。

output

對每乙個用例輸出一行,如果能夠通過考試,則輸出「yes」和消耗最短時間,用空格隔開。 否則,輸出「no」。

sample input 1

15 40 21

12 10

16 10

20 10

24 10

8 3sample output 1

yes 36

簡單的01揹包問題,用二維動態規劃來求解,一維表示問題的數量,另一維表示所用時常,最後找出滿足條件的最小時長即可。

狀態轉移矩陣:

if

(k[0])

else

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

intmain()

//排序

for(

int j =

0; j < problems.

size()

-1; j++)}

}for

(int j =

1; j < dp.

size()

; j++

)else}}

int flag=0;

for(

int p =

0; p < dp[n]

.size()

; p++)}

if(flag==0)

}// system("pause");

return0;

}

演算法(揹包問題 01揹包問題)

01揹包問題 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,...

演算法 0 1揹包問題

揹包問題是演算法中的乙個經典問題,它有很多子問題,比如0 1揹包問題,完全揹包問題,多重揹包問題等等。而今天所說的0 1揹包問題的原始描述為 現在有n件物品和乙個最大承載重量為m的揹包,要從這n件物品中選擇其中的k 1 k n 件,使得所選擇的物品的價值總和最大且其總重量不超過揹包的最大載重量。這n...

演算法 01揹包問題

對於乙個物品,選擇放還是不放,只有兩個選擇,故屬於01問題.物品 public class item 第n件物品,放入剩餘容量為leftweight的揹包中所獲得的最大價值 static int getmaxvalue listlist,int n,int leftweight 如果當前n的容量超過...