求助(邮票问题)
  • 板块学术版
  • 楼主Ammeter
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/12/17 18:16
  • 上次更新2023/11/3 21:49:06
查看原帖
求助(邮票问题)
575195
Ammeter楼主2021/12/17 18:16

【问题描述】   

设有已知面额的邮票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;
	}	
}
2021/12/17 18:16
加载中...