zoukankan      html  css  js  c++  java
  • 5483: 神奇的背包(带有限制的01背包)

    5483: 神奇的背包 分享至QQ空间

    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
    总提交: 197            测试通过:28

    描述

     

    现有一个神奇的背包,它的容量为n,它还有个另外一个属性m,也是它的神奇之处,即当它的剩余容量大于等于m时,可以装任意一个体积的物品,求最大能装多少价值的物品?

    输入

     

    首先输入n,m,t (0<=n,m,t<=1000),接下来是t行,每行两个整数w,v(0<=w,v<=1000000)分别代表体积和价值。

    输出

    输出最大能装多少价值,测试实例输出占一行。

    样例输入

    样例输出

     8

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n,m,t,maxx;
     5 int dp[1005],dpp[1005];
     6 struct Node{
     7     int w,v;
     8 }A[1005];
     9 
    10 bool cmp(Node a,Node b){
    11     if(a.v!=b.v) return a.v>b.v;   //先按照价值排序
    12     return a.w>b.w;  //在按照重量
    13 }
    14 
    15 int main()
    16 {
    17     ios::sync_with_stdio(false);
    18     cin>>n>>m>>t;
    19     for(int i=1,d1,d2;i<=t;i++){
    20         cin>>d1>>d2;
    21         A[i]={d1,d2};
    22     }
    23     sort(A+1,A+1+t,cmp);
    24     for(int i=1;i<=t;i++){
    25         if(i!=1){
    26             for(int k=n-m;k>=A[i].w;k--){   //预存出m的空间  拿来放最大的价值
    27                 dpp[k]=max(dpp[k],dpp[k-A[i].w]+A[i].v);
    28             }
    29         }
    30         for(int k=n;k>=A[i].w;k--){
    31             dp[k]=max(dp[k],dp[k-A[i].w]+A[i].v);
    32         }
    33     }
    34     for(int i=1;i<=n-m;i++) dpp[i]+=A[1].v;  //放入
    35     int res=0;
    36     for(int i=1;i<=n;i++){
    37         int maxx;
    38         maxx=max(dp[i],dpp[i]);  //两者进行比较
    39         res=max(res,maxx);
    40     }
    41     cout << res << endl;
    42     return 0;
    43 }
    View Code
  • 相关阅读:
    restful规范以及drf框架
    vue的第三方插件,vuex,axios,element-ui ,jq+bs
    路由,生命周期钩子函数,数据间的交互,全局配置js与css
    实例成员补充,项目环境配置以及vue组件
    vue指令实例成员
    初识vue
    django中如何暴露后端任意文件资源
    django中间件以及请求生命流程图
    wraps修饰器
    cookie与session
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/11937332.html
Copyright © 2011-2022 走看看