• hdu 2602 Bone Collector(01背包)


    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    const int maxn = 1e3 + 5;
    int val[maxn];
    int vol[maxn];
    int f[maxn][maxn];
    
    using namespace std;
    
    int main()
    {
        int t, n, v;
        scanf("%d", &t);
        while(t--){
            scanf("%d%d", &n, &v);
            for(int i = 1; i <= n; i++){
                scanf("%d", &val[i]);
            }
            for(int i = 1; i <= n; i++){
                scanf("%d", &vol[i]);
            }
            memset(f, 0, sizeof(f));            //状态转移方程
           for(int i = 1; i <= n; i++){
                for(int j = 0; j <= v; j++){
                    if(j >= vol[i])     //前i件物品放进体积为j的背包中的最大价值
                        f[i][j] = max(f[i - 1][j], f[i - 1][j - vol[i]] + val[i]);  //前i-1键物品放进体积为j-vol[i]的背包中,再加上第i个物品的价值,这里的条件是体积j大于vol[i]的体积
                    else               //前i-1件物品放进体积为j的背包中的价值
                        f[i][j] = f[i - 1][j];
                }
           }
           int ans = 0;
           for(int i = 0; i <= v; i++){
                ans = max(ans, f[n][i]);
           }
           printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    git 常用命令速查表
    Git常用命令备忘
    display:inline-block
    JS 封装的结构关系
    IE6,7,8 CSS HACK
    JS 观察者模式
    JS 数组迭代方法
    JS 单例模式
    JS Closure 闭包
    Currying and Uncurrying Js
  • 原文地址:https://www.cnblogs.com/Joe962850924/p/4275485.html
Copyright © 2020-2023  润新知