zoukankan      html  css  js  c++  java
  • lougu4141

    ftiasch 有 N 个物品, 体积分别是 W1, W2, …, WN。 由于她的疏忽, 第 i 个物品丢失了。 “要使用剩下的 N – 1 物品装满容积为 x 的背包,有几种方法呢?” — 这是经典的问题了。她把答案记为 Count(i, x) ,想要得到所有1 <= i <= N, 1 <= x <= M的 Count(i, x) 表格。

    正难则反,我们先背包一下,算出没有约束条件的值,在减去不可发的情况,(C(i,j),j>=a[i]),我们直接背包计算了使用i的情况,他应该减去,在没有i的情况下其他物品装满(j-a[i])的方案

    code:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    
    using namespace std;
    
    const int MAXX = 2020;
    
    int f[MAXX], c[MAXX][MAXX], a[MAXX];
    int n, m;
    int main() {
      scanf("%d%d", &n, &m);
      for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
      f[0] = 1;
      for (int i = 1; i <= n; ++i)
        for(int j = m; j >= 0; --j) 
          if(j - a[i] >= 0)f[j] += f[j - a[i]] % 10;
      for (int i = 1; i <= n; ++i) {
        c[i][0] = 1;
        for (int j = 1; j <= m; ++j) {
          if(j >= a[i])c[i][j] = (f[j] - c[i][j-a[i]] + 10) % 10;
          else c[i][j] = f[j] % 10;
          printf("%d",c[i][j]);
        }
        printf("
    ");
      }
      return 0;
    }
    
  • 相关阅读:
    简单计算器
    dfs(通过控制点的编号来得出每个点的坐标)
    dfs(通过控制点的编号来得出每个点的坐标)
    神奇的 组合数
    神奇的 组合数
    B. Light It Up
    B. Light It Up
    Python 字符串
    Python radians() 函数
    Python degrees() 函数
  • 原文地址:https://www.cnblogs.com/ARTlover/p/9813422.html
Copyright © 2011-2022 走看看