zoukankan      html  css  js  c++  java
  • HDU 2602 (01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2602

    简单的0-1背包问题

    代码如下:

    #include <cstdio>
    #include <cstring>
    using namespace std;

    int value[1001], volume[1001];
    int record[1001][1001];

    void knapsack(int n, int v);

    int main()
    {
      int i, j;
      int n, v, ncase;
      scanf("%d", &ncase);
      for(i = 0; i < ncase; i++)
      {
        scanf("%d%d", &n, &v);
        memset(record, 0, sizeof(record));
        for(j = 1; j <= n; j++)
        {
          scanf("%d", &value[j]);
        }
        for(j = 1; j <= n; j++)
        {
          scanf("%d", &volume[j]);
        }
        knapsack(n, v);
      }
      return 0;
    }

    void knapsack(int n, int v)
    {
      int i, j;
      for(i = 1; i <= n; i++)
      {
        for(j = v; j >= 0; j--)
        {      

          if(j < volume[i])
          {
            record[i][j] = record[i - 1][j];
          }

          else if(record[i - 1][j - volume[i]] + value[i] > record[i - 1][j])
          {
            record[i][j] = record[i - 1][j - volume[i]] + value[i];
          }
          else
          {
            record[i][j] = record[i - 1][j];
          }
        }
      }
      printf("%d\n", record[n][v]);
    }

    可进行空间优化:

    #include <cstdio>
    #include <cstring>
    using namespace std;

    int value[1001], volume[1001];
    int record[1001];

    void knapsack(int n, int v);

    int main()
    {
      int ncase;
      int n, v;
      int i, j;
      scanf("%d", &ncase);
      for(i = 0; i < ncase; i++)
      {
        scanf("%d%d", &n, &v);
        memset(record, 0, sizeof(record));
        for(j = 0; j < n; j++)
        {
          scanf("%d", &value[j]);
        }
        for(j = 0; j < n; j++)
        {
          scanf("%d", &volume[j]);
        }
        knapsack(n, v);
      }
      return 0;
    }

    void knapsack(int n, int v)
      {
        int i, j;
        for(i = 0; i < n; i++)
        {
          for(j = v; j >= volume[i]; j--)
          {
            if(record[j - volume[i]] + value[i] > record[j])
            {
              record[j] = record[j - volume[i]] + value[i];
            }
          }
        }
        printf("%d\n", record[v]);
    }

  • 相关阅读:
    keras模型可视化问题记录(pydot-ng、graphviz)-windows10
    逻辑回归的 LogisticRegressionCV函数
    Google Proxy SwitchyOmega安装
    Windows defender 添加例外项——文件夹、软件等
    matlab坐标轴的一些属性
    matlab PLSR拟合
    使用tensorflow api生成one-hot标签数据
    keras model.compile 的使用
    python 图片拼接成固定行列
    python动态变量名
  • 原文地址:https://www.cnblogs.com/10jschen/p/2614047.html
Copyright © 2011-2022 走看看