zoukankan      html  css  js  c++  java
  • Problem 2214 Knapsack problem 福建第六届省赛

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2214

    题目大意:给你T组数据,每组有n个物品,一个背包容量B,每件有体积和价值。问你这个背包容纳的物品最大价值是多少。每个物品只能放入一次背包。

     解题思路:首先这个很清楚看出来是个01背包。但是这个背包容量特别大,同时物品的体积很大,总的价值却很少。寻常意义上d[i]表示背包容量为i时的最大价值,那么我们把这个d[]数组的含义改变一下,d[i]表示装价值为i时所需的最小容量。
    AC代码:
    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <vector>
    using namespace std;
    
    int main()
    {
     int t,n,c;//案例数
     long long  d[5005];
     scanf("%d",&t);
     while(t--)
     {
      int temp=0;
      memset(d,0x7f,sizeof(d));
      d[0]=0LL;
      scanf("%d %d",&n,&c);
      for(int i=0;i<n;i++)
      {
       int w,v;
       scanf("%d %d",&w,&v);
       temp+=v;
       for(int j=temp;j>=v;j--)
         d[j]=min(d[j],d[j-v]+w);
      }
      for(int i=temp;i>=0;i--)
      if(d[i]<=c) { printf("%d
    ",i);break;}
     }
     return 0;
    }
  • 相关阅读:
    Android深度探索-卷1 第三章
    Android深度探索-卷1 第四章
    Android深度探索-卷1 第二章
    Android深度探索-卷1 第一章
    硬件抽象层HAL
    嵌入式Linux调试技术
    蜂鸣器驱动
    控制发光二极管
    搭建S3C6410开发板的测试环境
    统计单词个数
  • 原文地址:https://www.cnblogs.com/www-cnxcy-com/p/5756793.html
Copyright © 2011-2022 走看看