zoukankan      html  css  js  c++  java
  • 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;  
    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.
  • 相关阅读:
    Binary Trees
    [POJ] String Matching
    Tree
    Maxmum subsequence sum problem
    poj 2104 划分树
    poj 2486 树形dp
    poj 1848 树形dp
    hdu 4578 线段树
    hdu 4585 set应用
    hdu 2412 树形DP
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412313.html
Copyright © 2011-2022 走看看