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
if __name__ ==
'__main__'
:for _ in
range
(int
(input()
)): n, h, p =
list
(map
(int
,input()
.strip(
).split())
)# 最大耗時就是最大容量
h_arr =
# 耗時 耗時作為重量
p_arr =
# 分數 分數作為價值
for i in
range
(n):
temp =
list
(map
(int
,input()
.strip(
).split())
)0])
-1])
dp =[[
0]*(h +1)
for _ in
range
((n +1)
)]min_tar = h +
1for i in
range(1
, n +1)
:for j in
range(1
, h +1)
:if h_arr[i -1]
<= j:
# 如果可以放
op_add = dp[i -1]
[j - h_arr[i -1]
]+ p_arr[i -1]
# 放入當前物品\
op_not = dp[i -1]
[j] dp[i]
[j]=
max(op_add, op_not)
else
:# 不能放
dp[i]
[j]= dp[i -1]
[j]if dp[i]
[j]>=21:
# 如果滿足了條件,則記錄當前時間
min_tar =
min(min_tar, j)
if dp[-1
][-1
]< p:
print
("no"
)else
:print
("yes "
+str
(min_tar)
)
01揹包問題,高階演算法課後題 是否能通過考試
是否能通過考試 description 小張想要通過明天的考試。他知道考題的分值分布,也知道考試中要拿到每乙個題目需要耗費的時間。假設考試時長為h,共n個題目,需要拿到p分才能通過考試。現在已知每個考題的得分與耗時,請你判斷小張能否通過合理安排時間,而通過考試,並給出通過考試的最短時間。input ...
通過考試(概率dp)
小明同學要參加一場考試,考試一共有n道題目,小明必須做對至少60 的題目才能通過考試。考試結束後,小明估算出每題做對的概率,p1,p2,pn。你能幫他算出他通過考試的概率嗎?輸入第一行乙個數n 1 n 100 表示題目的個數。第二行n個整數,p1,p2,pn。表示小明有pi 的概率做對第i題。0 p...
0基礎能報名軟考嗎?怎麼備考能通過考試?
0基礎能報名軟考嗎?怎麼備考能通過考試?我們都知道軟考有初 中 高三個級別,選擇適合的報考資格,對於通過軟考也是非常重要的。那麼,沒有基礎的考生怎麼報考好呢?首先看你報考的目的是什麼,如果只是想考個軟考證書,那麼初級肯定是最容易的,而初級裡資訊處理技術員與資訊系統執行管理員考試難度相對來說會小一點。...