• 01背包模板题 hdu2602 Bonecollector


    由于数组的滚动过程中当前值(i,j)的更新需要用到上一层的(i-1,j-wi)的值,所以在更新当前的j之前不能更新上一层的j之前的值,故01背包是从后向前更新的(重量取值是从大到小的)。

    代码如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef unsigned int ui;
     4 typedef long long ll;
     5 typedef unsigned long long ull;
     6 #define pf printf
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define prime1 1e9+7
     9 #define prime2 1e9+9
    10 #define pi 3.14159265
    11 #define lson l,mid,rt<<1
    12 #define rson mid+1,r,rt<<1|1
    13 #define scand(x) scanf("%llf",&x) 
    14 #define f(i,a,b) for(int i=a;i<=b;i++)
    15 #define fm(i,a,b) for(int i=a;i>=b;i--)
    16 #define scan(a) scanf("%d",&a)
    17 #define dbg(args) cout<<#args<<":"<<args<<endl;
    18 #define pb(i) push_back(i)
    19 #define ppb(x) pop_back(x)
    20 #define inf 0x3f3f3f3f
    21 #define maxn 100005
    22 int n,m,t,vol;
    23 int w[maxn],v[maxn],dp[maxn];
    24 int main()
    25 {
    26     //freopen("input.txt","r",stdin);
    27     //freopen("output.txt","w",stdout);
    28     std::ios::sync_with_stdio(false);
    29     scan(t);
    30     while(t--)
    31     {
    32         scan(n);scan(vol);
    33         f(i,1,n)
    34         scan(v[i]);
    35         f(i,1,n)scan(w[i]);
    36         mem(dp,0);
    37         for(int i=1;i<=n;i++)
    38             for(int j=vol;j>=w[i];j--)
    39             {
    40                     dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
    41             }
    42             pf("%d
    ",dp[vol]);
    43      } 
    44  } 
  • 相关阅读:
    log4j的基本配置参数
    插入透明背景Flash的HTML代码
    oracle获取字符串长度函数length()和hengthb()
    HSQLDB安装与使用
    linux下完全删除Oracle
    SQL查询前几条记录
    LINUX安装ORACLE 9204 报错解决!!
    ORACLE 归档日志打开关闭方法
    hsqldb快速入门
    Openstack中查看虚拟机console log的几种方法
  • 原文地址:https://www.cnblogs.com/randy-lo/p/12453970.html
Copyright © 2020-2023  润新知