278. 数字组合

题目描述

给了n个正整数,希望选出若干个,然他们的和是m,求方案数?

f1-01背包求恰好为m的方案数

基本分析

  1. 恰好为m怎么考虑?定义状态的时候就地成恰好为j
  2. 属性怎么修改?+之前的方案数
  3. 初始化?f[0] = 1

代码

#include <iostream>
#include <algorithm>

using namespace std;

const int MAX_M = 10000;
int f[MAX_M + 10];

int n, m;

int main()
{   
    f[0] = 1;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
    {
        int v;
        scanf("%d", &v);
        for (int j = m; j >= v; j --)
            f[j] += f[j - v];
    }
    
    printf("%d", f[m]);
    
    return 0;
}

总结

  1. 每个数字都是物品,每个数字的值就是体积
posted @ 2023-03-30 14:36  zhangk1988  阅读(41)  评论(0)    收藏  举报