zoukankan      html  css  js  c++  java
  • Bone Collector(复习01背包)

    传送门

    题目大意:01背包裸题。

    复习01背包:

    题目 
    N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 

    题解:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int f[1002],w[1001],v[1001];
    int n,m,t;
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            memset(f,0,sizeof(f));
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++)
            scanf("%d",&v[i]);
            for(int i=1;i<=n;i++)
            scanf("%d",&w[i]);
            for(int i=1;i<=n;i++)
            for(int j=m;j>=w[i];j--)
            f[j]=max(f[j],f[j-w[i]]+v[i]);
            printf("%d
    ",f[m]);
        } 
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int t,n,m,v[1002],w[1003],f[1003][1003];
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            memset(f,0,sizeof(f));
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++)
            scanf("%d",&v[i]);
            for(int i=1;i<=n;i++)
            scanf("%d",&w[i]);
            for(int i=1;i<=n;i++)
            for(int j=m;j>=0;j--)
            {
                if(j-w[i]<0)
                f[i][j]=f[i-1][j];
                else
                f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
            }
            printf("%d
    ",f[n][m]);
        }
        return 0;
    }
  • 相关阅读:
    LeetCode 8 有效的括号
    String源码学习
    LeetCode 7最长公共前缀
    LeetCode 5回文数
    LeetCode 6罗马数字转整数
    LeetCode 4.反转整数
    LeetCode 3.无重复字符的最长子串
    区分子串和子序列
    LeetCode 1.两数之和
    一个十分好用的动画工具:Velocity.js
  • 原文地址:https://www.cnblogs.com/zzyh/p/7044540.html
Copyright © 2011-2022 走看看