题解 | 最小邮票数
#include<iostream> using namespace std; int a[21],dp[101],h[101]; int main(){ int m,n; while(scanf("%d",&m)!=EOF){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=0;i<=m;i++){ dp[i] = 0; h[i] = 0; } for(int i=n;i>=0;i--){ for(int j=m;j>=a[i];j--){ if(dp[j]<dp[j-a[i]]+a[i]){ dp[j] = dp[j-a[i]]+a[i]; h[j]++; } } } if(dp[m]==m){ cout<<h[m]<<endl; }else cout<<0<<endl; } }