给定 NN 个正整数 A1,A2,…,ANA1,A2,…,AN,从中选出若干个数,使它们的和为 MM,求有多少种选择方案。
输入格式
第一行包含两个整数 NN 和 MM。
第二行包含 NN 个整数,表示 A1,A2,…,ANA1,A2,…,AN。
输出格式
包含一个整数,表示可选方案数。
数据范围
1≤N≤1001≤N≤100,
1≤M≤100001≤M≤10000,
1≤Ai≤10001≤Ai≤1000,
答案保证在 int 范围内。输入样例:
4 4 1 1 2 2输出样例:
3
//01背包求方案数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10010;
int f[N];//当和为n时的方案数目
int main(){
int n,m;
cin>>n>>m;
f[0]=1;//和为0,方案数为1
for(int i=0;i<n;i++){
int v;
cin>>v;
for(int j=m;j>=v;j--){
f[j]+=f[j-v];
}
}
cout<<f[m]<<endl;
return 0;
}
01背包问题求解

本文介绍了一种解决01背包问题的经典算法,通过动态规划方法计算给定整数集合中和为特定值的组合数量。输入包括整数数量及目标和,输出为可能的选择方案数。
543

被折叠的 条评论
为什么被折叠?



