砝码称重

 

砝码称重

来源:NOIP1996(提高组)  第四题

【问题描述】

    设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),用他们能称出的重量的种类数。

【输入文件】

  a1  a2  a3  a4  a5  a6

    (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个,中间有空格)。

【输出文件】

  Total=N

    (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)。

【输入样例】

    1 1 0 0 0 0

【输出样例】

    TOTAL=3

=======================

数据:

输入

输出

1 1 0 0 0 0

Total=3

2 2 0 0 0 0

Total=6

1 0 3 0 0 0

Total=7

3 4 0 5 0 0

Total=36

2 2 2 2 2 2

Total=82

0 3 2 7 4 5

Total=185

0 6 3 4 2 1

Total=79

1 2 3 4 5 6

Total=204

6 5 4 3 2 1

Total=83

10 10 10 10  1   1

Total=140

========================

{
ID:jie19952
PROG:
LANG:PASCAL
}
type
  re=record
       sum:longint;
       weight:longint;
     end;
var
  a:array[1..6]of re;
  f_bool:array[0..1000]of boolean;
  ans:longint;
procedure init;
begin
  assign(input,'fama.in');
  assign(output,'fama.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output);
  halt;
end;

procedure main;
var
  t,i,j,k:longint;

begin
  a[1].weight:=1; a[4].weight:=5;
  a[2].weight:=2; a[5].weight:=10;
  a[3].weight:=3; a[6].weight:=20;
  for t:=1 to 10 do
  begin
    for i:=1 to 6 do
      read(a[i].sum);
    //fillchar(f,sizeof(f),0);
    fillchar(f_bool,sizeof(f_bool),false);
    f_bool[0]:=true;
    for i:=1 to 6 do
      for j:=1000 downto 0 do
        if f_bool[j] then
        for k:=1 to a[i].sum do
          begin
            f_bool[j+a[i].weight*k]:=true;
          end;
    ans:=-1;
    for i:=0 to 1000 do
      if f_bool[i] then inc(ans);
    writeln('TOTAL=',ans);
  end;
end;

begin
  init;
  main;
  terminate;
end.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值