思路:
完全背包裸体+特殊点处理(背包必须刚好装满)
ACcode:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=4e3+10;
int n,a,b,c,f[N],w[5];
void solve() {
cin>>n>>w[1]>>w[2]>>w[3];
//本题不同的就是背包最后必须装满
//初始化
memset(f,-1,sizeof f);
f[0]=0;
//完全背包
for(int i=1; i<=3; i++) {
for(int j=w[i]; j<=n; j++) {
if(f[j-w[i]]!=-1) {//**
f[j]=max(f[j],f[j-w[i]]+1);
}
}
}
cout<<f[n]<<"\n";
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
over~