电子商城网站开发购物车,竞价网站制作,dede网站模板客,做五金找订单查什么网站思路#xff1a;我们可以看出#xff0c;这是一道完全背包问题#xff0c;但是呢#xff0c;有一点需要注意#xff1a;那就是我们在装背包的时候并不能保证一定能装满背包#xff0c;但是这里的背包要求是让我们装满的#xff0c;所以我们需要判断这个背包装满才行我们可以看出这是一道完全背包问题但是呢有一点需要注意那就是我们在装背包的时候并不能保证一定能装满背包但是这里的背包要求是让我们装满的所以我们需要判断这个背包装满才行所以用模板直接套是并不能解决问题的。
这里我们初始化了一下f数组让它的全部值为-1只令f[0]0.这是因为需要进行递推0是必须要有初始值的一个值。在我们判断的时候for循环的第二层直接判断能不能装下在里面我们写if判断条件的时候我们需要需要判断一下当前的值是不是被更新过了也就是说是不是用过了没有用过说明我们递推到这里的时候这个状态并没有被更新也就是说我们的背包是没有被装满的。
#includeiostream
#includestdio.h
#includecstring
#includecstdlib
#includecmath
#includevector
#includealgorithm
#includestack
#includequeue
#includesstream
#includenumeric
#includemap
#includelimits.h
#includeset
#define int long long
#define MAX 20001
#define _for(i,a,b) for(int ia;i(b);i)
#define ALL(x) x.begin(),x.end()
using namespace std;
using PIIpairint, int;
int n, m;
int counts;
int f[MAX];
int arr[MAX];
signed main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin n;for (int i 1; i 3; i)cin arr[i];memset(f, -1, sizeof f);f[0] 0;for (int i 1; i 3; i) {for (int j arr[i]; j n; j) {if (f[j - arr[i]] 0)f[j] max(f[j], f[j - arr[i]] 1);}}cout f[n];return 0;
}