回 帖 发 新 帖 刷新版面

主题:[讨论]邮票问题的疑问

邮票问题的疑问
问题描述】设有已知面额的邮票m种,每种有n张。问:用总数不超过n张的邮票进行组合,能组合的邮票面额中可以连续出现面额数最多有多少?(1<=m<=100,1<=n<=100,1<=邮票面额<=255)
输入:第一行:n和m的值,中间用一空格隔开。 
第二行:a【1..m】(面额),每个数中间用一空格隔开。 
输出:连续面额数的最大值 
【样例输入】
4 3
1 2 4
【样例输出】
14
这是它的标程:
program  p1_2(input,output);
var
  a:array  [1..100]  of  integer;
  money:array  [1..2550]  of  integer;
  total,n,m,i:integer;

procedure  search(k,n,x:integer);
var  i:integer;
begin
  if  (n=0)or(k=0)  then  exit;
  for  i:=n  downto 0  do
        begin
           x:=x+a[k]*i;
           n:=n-i;
           money[x]:=money[x]+1;
           search(k-1,n,x);
           x:=x-a[k]*i;
           n:=n+i;
       end
end;
function maxlong:integer;
var  j,total,max:integer;
begin
j:=n*a[m];
max:=0;
repeat
   while  (money[j]=0)and(j>0)  do
      j:=j-1;
   total:=0;
   while  (money[j]>0)and(j>0)  do
     begin total:=total+1;j:=j-1 end;
   if  max<total then  max:=total   ;
until  j<=0;
maxlong:=max
end;
begin
  assign(input,'word.in');
  reset(input);
  assign(output,'word.out');
  rewrite(output);
  readln(m,n);
  for  i:=1  to  m  do  read(a);
  total:=0;
  search(m,n,0);
  writeln(maxlong)
end.
这里只要money[n]存在即可大于一,那么,会不会造成n超过他应该的最大值呢??(即,如果3-30是一个连续,2-15是一个连续,那么,他们的money都大于0,会不会造成误解为2-30的呢??)如果不会,说明理由。谢谢啦!!

回复列表 (共6个回复)

沙发

连续面额数的最大值 是指连续最多的最大值还是连续最多的连续个数?

板凳

应该是
  连续最多的连续个数

3 楼

那既然3~30可以,2也可以,那么2~30当然可以

4 楼

但这样会不会超过最大上限n呢??我指的可是两个范围都是受n和连续的数,两个约束条件同时控制,很可能以这样超过了n啦。

5 楼

n究竟是指连续多个邮票加起来不超过的,还是每个面额不超过的.

我语文很差,听不懂你的意思

6 楼


不要紧,你能回复,我很感动。不过上面有题目描述,你可以多看几遍。应该是邮票数目不超过n.

我来回复

您尚未登录,请登录后再回复。点此登录或注册