NYOJ311-完全背包

简介:

完全背包
时间限制:3000 ms    内存限制:65535 KB
难度:4
描述
直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积是c,价值是w。求解将哪些物品装入

背包可使这些物品的体积总和不超过背包容量,且价值总和最大。本题要求是背包恰好装满背包时,求出最大价值总和是多少。如果不能恰好

装满背包,输出NO

输入
第一行: N 表示有多少组测试数据(N7)。
接下来每组测试数据的第一行有两个整数M,V。 M表示物品种类的数目,V表示背包的总容量。(0M=2000,0V=50000)
接下来的M行每行有两个整数c,w分别表示每种物品的重量和价值(0c100000,0w100000)
输出
对应每组测试数据输出结果(如果能恰好装满背包,输出装满背包时背包内物品的最大价值总和。 如果不能恰好装满背包,输出NO)

样例输入
2
1 5
2 2
2 5
2 2
5 1

样例输出
NO
1


AC代码:

<p>#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int INF = -2147483647;
int w[2100],v[2100],dp[51000];
int max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    int i,j,T,n,m;
    scanf("%d",&T);
    while(T--)
    {
      scanf("%d %d",&n,&m);
      memset(dp,0,sizeof(dp));//后期全靠dp[0]==0了 
      for(i=1;i<=n;i++)
      scanf("%d %d",&w[i],&v[i]);
      for(i=1;i<=m;i++)
      dp[i]=INF;
      for(i=1;i<=n;i++)
      for(j=w[i];j<=m;j++)
      dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
      if(dp[m]>=0)
      printf("%d\n",dp[m]);
      else
      printf("NO\n");
    }
    return 0;
}</p>
相关文章
|
3月前
完全背包问题
完全背包问题
28 0
|
算法
区间DP
复习acwing算法基础课的内容,本篇为讲解基础算法:动态规划——区间DP,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
81 0
区间DP
|
机器学习/深度学习 决策智能
完全背包详解
完全背包: 完全背包(CompletePack): 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
1174 0
|
C++ 消息中间件 定位技术
nyoj题目20吝啬的国度【深搜】
吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。
755 0
|
API
NYOJ 540
  为了给学弟学妹讲课,我水了一道题…… import java.util.Arrays; import java.util.Scanner; public class NYOJ540 { public static void main(String[] args) { ...
799 0
|
定位技术
NYOJ 20
  吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。
798 0
NYOJ 212
  K尾相等数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 输入一个自然数K(K>1),如果存在自然数M和N(M>N),使得K^M和K^N均大于等于1000,且他们的末尾三位数相等,则称M和N是一对“K尾相等数”。
606 0
|
JavaScript
NYOJ 456
  邮票分你一半 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现...
608 0