01背包简单问题 数字组合
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01背包简单问题 数字组合相关的知识,希望对你有一定的参考价值。
给定 N 个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。
输入格式
第一行包含两个整数 N 和 M。
第二行包含 N 个整数,表示 A1,A2,…,AN。
输出格式
包含一个整数,表示可选方案数。
数据范围
1≤N≤100,
1≤M≤10000,
1≤Ai≤1000
输入样例:
4 4
1 1 2 2
输出样例:
3
-
这题是01背包问题
-
注意设置初始值
f[0]从前0个数选,数字总和为0的方案数为1 -
此处采用滚动数组的方法
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
int f[N],a[105];
int main()
{
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
f[0]=1;
for(int i=1;i<=n;i++)
{
for(int j=m;j>=a[i];j--)
f[j] = f[j]+f[j-a[i]];
}
cout<<f[m]<<'\\n';
return 0;
}
以上是关于01背包简单问题 数字组合的主要内容,如果未能解决你的问题,请参考以下文章