完全揹包(經典dp)
完全揹包
時間限制:3000 ms | 記憶體限制:65535 KB 難度:4- 描述
-
直接說題意,完全揹包定義有N種物品和一個容量為V的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。本題要求是揹包恰好裝滿揹包時,求出最大價值總和是多少。如果不能恰好裝滿揹包,輸出NO
- 輸入
- 第一行: N 表示有多少組測試資料(N<7)。
接下來每組測試資料的第一行有兩個整數M,V。 M表示物品種類的數目,V表示揹包的總容量。(0<M<=2000,0<V<=50000)
接下來的M行每行有兩個整數c,w分別表示每種物品的重量和價值(0<c<100000,0<w<100000) - 輸出
- 對應每組測試資料輸出結果(如果能恰好裝滿揹包,輸出裝滿揹包時揹包內物品的最大價值總和。 如果不能恰好裝滿揹包,輸出NO)
- 樣例輸入
-
2 1 5 2 2 2 5 2 2 5 1
- 樣例輸出
-
NO 1
-
#include <stdio.h> #include <string.h> #define MAX(x,y) (x > y ? x : y) int c[2001],w[2001]; int dp[50001]; int main(void) { int n,m,max,i,j; scanf("%d",&n); while(n--) { scanf("%d%d",&m,&max); for(i = 0; i < m; i++) { scanf("%d%d",&w[i],&c[i]); } memset(dp,-1000000,sizeof(dp)); dp[0] = 0; for(i = 0; i < m; i++) { for(j = w[i]; j <= max; j++) { dp[j] = MAX(dp[j],dp[j-w[i]]+c[i]); } } if(dp[max] < 0) printf("NO\n"); else printf("%d\n",dp[max]); } return 0; }
相關推薦
完全揹包(經典dp)
完全揹包 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 直接說題意,完全揹包定義有N種物品和一個容量為V的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超
LintCode798: Backpack VII (完全揹包問題 DP經典)
完全揹包問題可以視為01揹包的變形。 解法1:沒有經過優化的DP。 dp[i][j] 表示前i件物品在價值不超過j的情況下的最大重量。 若輸入為: 8 //n = money [3,2] //pric
hdu 1114 Piggy-Bank_完全揹包經典例題!
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10968 Accepted Su
LintCode 562: Backpack IV (完全揹包問題變種,DP經典)
這題就是完全揹包的變種。 dp[x]表示能裝滿size 為x的揹包的最多方法總數。 注意: dp[j] += dp[j - nums[i]]; 舊的dp[j]: 上次的# of ways to fill size=j knapsack with item i 舊的dp[j-n
LintCode 440: Backpack III (完全揹包問題,DP經典)
解法1: 將其視為多重揹包變形,每種物品取的上限是m/A[i]。 時間複雜度: O(sum(m/A[i]) * backpackSize)。 空間複雜度: O(m)。 class Solution {
HDU 2159 FATE(有選擇物品總個數限制的完全揹包,經典!!)
FATE Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit
[HDU-1248] 寒冰王座 完全揹包DP
演算法:裸完全揹包DP 難度:NOIP-- 真的就是一個裸的完全揹包DP 程式碼如下: #include <cstdio> #include <iostream> #in
@2015ACM/ICPC亞洲區長春站-重現賽(感謝東北師大) @HDU5534 (Dp,完全揹包)
題目描述 In mathematics, and more specifically in graph theory, a tree is an undirected graph in which any two nodes are connected by exactly
[完全揹包dp]Space Elevator POJ
poj.org/problem?id=2392 有一群奶牛想到太空去,他們有k中型別的石頭,每一類石頭高h,石頭能達到的高度c,以及它的數量a,在做揹包前需要對石塊能到達的最大高度(a)進行排序,而且每種磚塊都有一個限制條件,就是說以該種磚塊結束的最大高度H不能超過某個高
Writing Code【Codeforces Round #302 (Div. 2)】【周賽第一場E】【DP】【完全揹包】
Programmers working on a large project have just received a task to write exactly m lines of code. There are n programmers working on a project, the i-th o
hdu6082 2017"百度之星"資格賽1003 度度熊與邪惡大魔王(完全揹包dp)
度度熊與邪惡大魔王Accepts: 3135 Submissions: 19439 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob
DP揹包之01揹包、完全揹包、多重揹包筆記
這是個經典話題,值得好好研究一番,本文作為學習筆記將會不斷更新。 主要參考了以下資料: 受益匪淺! 以下是Java的實現: package DP; import java.util.Arrays; public class Knapsack01 { s
dp 01揹包,完全揹包,多重揹包 模板
轉自http://www.cppblog.com/tanky-woo/archive/2010/07/31/121803.html 首先說下動態規劃,動態規劃這東西就和遞迴一樣,只能找區域性關係,若想全部列出來,是很難的,比如漢諾塔。你可以說先把除最後一層的其
經典揹包問題 01揹包+完全揹包+多重揹包
01 揹包 有n 種不同的物品,每個物品有兩個屬性,size 體積,value 價值,現在給一個容量為 w 的揹包,問最多可帶走多少價值的物品。 int f[w+1]; //f[x] 表示揹包容量為x 時的最大價值 for (int i=0; i<n; i
度度熊與邪惡大魔王(完全揹包dp)
度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p
【HDU 1114】Piggy-Bank(dp||完全揹包問題)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 26458 Accepted
DP揹包問題小結(01揹包,完全揹包,需恰好裝滿或不需,一維DP、二維DP)
1) 揹包基礎,先以01揹包、求揹包所裝物品價值之和的最大值、不要求恰好裝滿時,易於理解的二維DP陣列儲存為例: #include <iostream> #include <string.h> using namespace std; int
01揹包 ,完全揹包,多重揹包 dp (動態規劃入門dp)
dp 動態規劃,確實難啃, 光 最簡單的 揹包問題,就 費老大勁. 思想! 思想! 思想! 類似於遞推, 區域性找 關係. 揹包問題, 就兩種狀態 放還是不放? 其實關於揹包放不放的
經典動態規劃:完全揹包問題
讀完本文,你可以去力扣拿下如下題目: [518.零錢兌換II](https://leetcode-cn.com/problems/coin-change-2) **-----------** 零錢兌換 2 是另一種典型揹包問題的變體,我們前文已經講了 [經典動態規劃:0-1 揹包問題](https://
POJ 1088: 滑雪(經典 DP+記憶化搜索)
esp roman ted font eof 個人 algorithm set str 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996