状态表示:
(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;
}