1285 -- 【递推练习】邮票问题
Description
设有已知面额的邮票m种,每种有n张,用总数不超过n张的邮票,能从面额1开始,最多连续组成 面额?
Input
第一行两个整数m和n
第二行m个整数
Output
输出仅一个整数,表示能够组成连续面额数的最大值
Sample Input
3 4 1 2 4
Sample Output
14
Hint
1<=m<=100,1<=n<=100,1<=邮票面额<=255
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int p[30005];
int main() {
int m,n;
int a[105],i,j,s=0,minn;
cin>>m>>n;
for(i=1;i<=m;i++) {
cin>>a[i];
}
while(1){
s++;
p[s]=0xfffffff;
for(i=1;i<=m;i++) {
if(s-a[i]>=0) {
if(s-a[i]==0) {
if(p[s-a[i]]+1<p[s]) {
p[s]=p[s-a[i]]+1;
}
}else {
if(p[s-a[i]]+p[a[i]]<p[s]) {
p[s]=p[s-a[i]]+p[a[i]];
}
}
}
}
if(p[s]==0xfffffff||p[s]>n) {
cout<<s-1;
return 0;
}
}
return 0;
}