SWST OJ 邮票
Sample Input
5 2 1 3
Sample Output
13
#include <iostream> #include <cstring> using namespace std; int dp[2000001]; int main() { int i,j,k; int Max,N; int v,value[2005]; int count=0; cin>>Max>>N; for(i=0;i<N;i++) { cin>>value[i]; } dp[0]=0; for(i=1;i<=2000000;i++) { dp[i]=0x7fffffff; for(j=0;j<N;j++) { if(value[j]<=i) { if(dp[i]>dp[i-value[j]]+1)//每次记录贴出当前值所需邮票的最少张数 { dp[i]=dp[i-value[j]]+1; } } } if(dp[i]>Max)//如果最少张数大于Max即找到了结果 { cout<<i-1<<endl; break; } } return 0; }