【问题描述】
设有已知面额的邮票m种,每种有n张,用总数不超过n张的邮票,能从面额1开始,最多连续组成多少面额。(1≤m≤100,1≤n≤100,1≤邮票面额≤255)
【输入格式】
第一行:m,n的值,中间用一空格隔开。
第二行:A[1..m](面额),每个数中间用一空格隔开。
【输出格式】
连续面额数的最大值
【输入样例】stamp.in
3 4
1 2 4
【输出样例】stamp.out
14
这个是我写的代码,不知道有没有理解错误
#include<bits/stdc++.h>
#define N 10001
using namespace std;
map <int,int> a1;
set <int> b1;
bool bb[N]={0};
int n,m;
int aa[N],num=0;
int a[N],b[N],tot,all,k=1,Max=0,shenmo;
int search(int,int);
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>a[i];
tot=m*n;
sort(a+1,a+m+1);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
b[k]=a[i];
k++;
}
for(int i=1;i<=tot;i++) search(i,1);
for(set<int>::iterator it=b1.begin(); it!=b1.end(); it++) if(a1[*it]>Max) shenmo=*it;
printf("%d \n",shenmo);
system("pause");
return 0;
}
int search(int r,int k1){
int i;
for(int i=1;i<=tot;i++)
if(!bb[i]){
aa[k1]=b[i];
bb[i]=1;
if(k1==r) {
for(int i=1; i<=r; i++) num=num+b[aa[i]];
a1[num]++;b1.insert(num); }
else search(r,k1+1);
bb[i]=0;
}
}