题目大意:
给你一个
n(n<=3)
,对于
x[1],x[2]....x[n]∈N
,有约束条件满足
x[1]∗c[1]+x[2]∗c[2]+.....+x[n]∗c[n]=v(v<=106)
,
f(x[1],x[2],...,x[n])=∑ni=1x[i]
,要求满足约束条件下的
f
的最大值,如果不存在就输出
解题思路:
首先看到
N<=3
就有一种想暴搜的冲动,但是冷静下来发现,这就是一个完全背包,并且需要把背包塞满。一共有三个物品,第
i
个物品的价值为
AC代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int F[1000010]={0};
int N,v;
int c[4]={0};
int main()
{
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&c[i]);
scanf("%d",&v);
for(int i=1;i<=v;i++) F[i]=2e9;
for(int i=1;i<=N;i++)
for(int j=c[i];j<=v;j++)
F[j]=min(F[j],F[j-c[i]]+1);
if(F[v]==2e9) cout<<-1<<endl;
else cout<<F[v]<<endl;
return 0;
}