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;
    }
  • 相关阅读:
    串口应用
    状态栏颜色
    冒泡排序
    快速排序
    good软件测试博客地址
    软件测试面试题
    股票基础知识
    软件测试基本知识
    软件测试流程
    mycat实现分库分表(二)
  • 原文地址:https://www.cnblogs.com/zzyh/p/7044540.html
Copyright © 2011-2022 走看看