https://codeforces.com/problemset/problem/189/A
这道题有两种解法,一种是把它当成完全背包问题求解,一种是一个个枚举暴力出来
枚举法:
我之前想的是一道做过的题 大致是 ax1+bx2+cx3=dx5 求一共有多少组解 和这道题差不多
这道题可以转换为 x1*a+x2*b+x3*c=n 那么我们只需要枚举出 x1 x2,然后对 x3 进行判断
以下是代码
#include<iostream>
using namespace std;
int main()
{
int n,a,b,c;
cin>>n>>a>>b>>c;
int res=0;
for(int i=0;i<=n/a;i++)
{
for(int j=0;j<=(n-(i*a))/b;j++)
{
if((n-(i*a)-(j*b))%c==0)
{
res=max(res,i+j+(n-(i*a)-(j*b))/c);
}
}
}
cout<<res;
return 0;
}
完全背包:
背包容量为 n ,共有三个物品,可取任意次,那么就是一道简单的完全背包模板题
注意要将 dp 数组初始化为无限小
#include<iostream>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
int dp[4010];
int main()
{
int a[3];
int n;
cin>>n>>a[0]>>a[1]>>a[2];
memset(dp,-INF, sizeof dp);
dp[0]=0;
for(int i=0;i<3;i++)
{
for(int j=a[i];j<=n;j++)
{
dp[j]=max(dp[j],dp[j-a[i]]+1);
}
}
cout<<dp[n];
return 0;
}