1380. 邮票
状态表示:
\(f(i,j)\):从前\(i\)张邮票中选,总面值恰好为\(j\)所需的最少邮票数。
状态转移:
按照完全背包的转移方式。
\[f(i,j)=\min(f(i-1,j),f(i,j-v_i)+1)
\]
边界:
\[f(0,0)=0
\]
const int N = 2e6+10;
int f[N];
int n, m;
int main()
{
cin >> m >> n;
memset(f, 0x3f, sizeof f);
f[0] = 0;
for(int i = 0; i < n; i++)
{
int value;
cin >> value;
for(int j = value; j < N; j++)
f[j] = min(f[j], f[j-value] + 1);
}
int res = 1;
while(f[res] <= m) res++;
cout << res - 1 << endl;
//system("pause");
return 0;
}