本文主要是介绍SSL 1072——砝码称重,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
beginif a>b then exit(a) else exit(b);
end;beginfor i:=1 to 6 do read(a[i]);for i:=1 to 6 dofor j:=1000 downto 1 dofor k:=1 to a[i] doif 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.
这篇关于SSL 1072——砝码称重的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!