1. 程式人生 > >完全揹包(經典dp)

完全揹包(經典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