NYOJ 311 完全背包

完全背包

时间限制: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
AC码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
struct node
{
	int x,y;
}num[2005];
int main()
{
	int i,j,n,v,T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&v);
		for(i=1;i<=n;i++)
			scanf("%d%d",&num[i].x,&num[i].y);
		int count[50001];
		memset(count,-999999,sizeof(count));
		count[0]=0;
		for(i=1;i<=n;i++)
		{
			for(j=num[i].x;j<=v;j++)
			{
				if(count[j]<(count[j-num[i].x]+num[i].y))
					count[j]=count[j-num[i].x]+num[i].y;
			}
		}
		if(count[v]>0)
			printf("%d\n",count[v]);
		else
			printf("NO\n");
	}
	return 0;
}

NYOJ 311 完全背包,布布扣,bubuko.com

时间: 2024-10-19 00:21:50

NYOJ 311 完全背包的相关文章

题解报告:NYOJ #311完全背包(恰好装满)

描述: 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w.求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少.如果不能恰好装满背包,输出NO. 输入: 第一行: N 表示有多少组测试数据(N<7). 接下来每组测试数据的第一行有两个整数M,V. M表示物品种类的数目,V表示背包的总容量.(0<M<=2000,0<V<=50000)接下来的

nyist oj 311 完全背包 (动态规划经典题)

完全背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w.求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少.如果不能恰好装满背包,输出NO 输入 第一行: N 表示有多少组测试数据(N<7). 接下来每组测试数据的第一行有两个整数M,V. M表示物品种类的数目,V表示背包的总容

nyist oj 311 全然背包 (动态规划经典题)

全然背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用.第i种物品的体积是c,价值是w. 求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少. 假设不能恰好装满背包,输出NO 输入 第一行: N 表示有多少组測试数据(N<7). 接下来每组測试数据的第一行有两个整数M.V. M表示物品种类的数目,V表示背

NYOJ(325)+NYOJ(456),01背包

题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=325 http://acm.nyist.net/JudgeOnline/problem.php?pid=456 太久没有接触DP了,分类把这个题目分到了搜索,其实是01背包,有意思的是这里的价值也是重量,我最多装sum/2,那么每个邮票的价值也就变成了重量,并且要尽可能的装满,价值也是价值的含义 两道题几乎一样. #include <stdio.h> #include <mat

nyoj 311-完全背包 (动态规划, 完全背包)

311-完全背包 内存限制:64MB 时间限制:4000ms Special Judge: No accepted:5 submit:7 题目描述: 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w.求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少.如果不能恰好装满背包,输出NO 输入描述: 第一行: N 表示有多少组测试数据(N<7). 接下来每组测试数

nyoj 苹果(01背包)

裸题 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<queue> 7 #include<algorithm> 8 #include<map> 9 #include<iomanip> 10 #include<climits&

完全背包 2016.5.8

一.题目 有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用 放入第 i 种物品的耗费的空间是 Ci,得到的价值是 Wi 求解: 将哪些物品装入背包,可使这些物品的耗费的空间总和不超过背包容量,且价值总和最大 二.基本思路 这个问题非常类似于01背包问题,所不同的是每种物品有无限件 也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种 而是有取 0 件.取 1 件.取 2 件--直至取 ?V / Ci? 件等很多种 如果仍然按照解01背包时的思路,令 dp[i,  v] 表示

动态规划经典题解--背包问题

1.完全背包--背包不允许剩余 #include <iostream> #include <string.h> #define N 50002 #define M 2002 using namespace std; //测试OJ:nyoj 311 /* 背包不允许剩余,与允许剩余相比,只需将d[i]初始为负无穷大,d[0]=0 d[i]: 用去i容量时的最大价值 */ int d[N]; struct Node { int pri; int vol; }c[M]; int main

NYOJ 654 喜欢玩warcraft的ltl (01背包常数优化)

[题目链接]:click here~~ 一个常数优化 前面的伪代码中有 for v=V..1,可以将这个循环的下限进行改进. 由于只需要最后f[v]的值,倒推前一个物品,其实只要知道f[v-w[n]]即可.以此类推,对以第j个背包,其实只需要知道到f[v-sum{w[j..n]}]即可,即代码中的 for i=1..N     for v=V..0 可以改成 for i=1..n     bound=max{V-sum{w[i..n]},c[i]}     for v=V..bound 这对于V