http://ac.jobdu.com/problem.php?pid=1209
这是一个巧合装满的0-1背包问题。
#include <stdio.h>
#include <algorithm>
int main(){
int m,n;
int dp[105],stamp[21];
while(scanf("%d",&m) !=EOF ){
scanf("%d",&n);
for (int i = 1; i <=n; ++i) {
scanf("%d",&stamp[i]);
}
for (int i = 0; i <=m; ++i) {
dp[i] = 9999999;
}
dp[0] = 0;
for (int i = 1; i <=n ; ++i) {
for (int j = m; j >=stamp[i]; j--) {
if(dp[j-stamp[i]] !=9999999 ) dp[j] =std::min(dp[j],dp[j-stamp[i]]+1);
}
}
printf("%d\n",dp[m]==9999999? 0: dp[m] );
}
}