您的位置:首页 > 其它

SSL 1072——砝码称重

2017-04-21 19:47 405 查看
Description

设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),

要求:

输入方式:a1 a2 a3 a4 a5 a6

(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)

输出方式:N

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

Input

Output

Sample Input

1 1 0 0 0 0

(注:下划线表示空格)

Sample Output

3 表示可以称出1g,2g,3g三种不同的重量。

最大只能为1000,

状态转移方程: f[j]:=max(f[j-k*v[i]]+k*v[i],f[j]);

1<=i<=6

1<=j<=1000

1<=k<=a[i]

代码如下:

const v:array[1..6] of longint=(1,2,3,5,10,20);
var f,a:array[0..1000] of longint;
w:array[0..1000] of boolean;
i,j,k,n,total:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;

begin
for i:=1 to 6 do read(a[i]);
for i:=1 to 6 do
for j:=1000 downto 1 do
for k:=1 to a[i] do
if j>=v[i]*k then begin f[j]:=max(f[j-k*v[i]]+k*v[i],f[j]); w[f[j]]:=true; end;

for i:=1 to 1000 do if w[i] then inc(total);
writeln(total);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: