zoukankan      html  css  js  c++  java
  • SSL 2293——暗黑游戏

    Description

    暗黑游戏中,装备直接决定玩家人物的能力。可以使用Pg和Rune购买需要的物品。暗黑市场中的装备,每件有不同的价格(Pg和Rune)、能力值、最大可购买件数。Kid作为暗黑战网的一个玩家,当然希望使用尽可能少的Pg和Rune购买更优的装备,以获得最高的能力值。请你帮忙计算出现有支付能力下的最大可以获得的能力值。

    Input

    第一行,三个整数N,P,R,分别代表市场中物品种类,Pg的支付能力和Rune的支付能力。
      第2..N+1行,每行四个整数,前两个整数分别为购买此物品需要花费的Pg,Rune,第三个整数若为0,则说明此物品可以购买无数件,若为其他数字,则为此物品可购买的最多件数(S),第四个整数为该装备的能力值。

    Output

    仅一行,一个整数,最大可获得的能力值。

    Sample Input

    3 10 10
    5 3 0 110
    4 3 4 120
    2 3 1 130
    Sample Output

    370


    其实这题和混合背包差不多(http://blog.csdn.net/ssl_zzy/article/details/70336492
    注意,如果选择无数次要顺枚举,s[i]次要逆枚举


    代码如下:

    var
      f:array[0..1000,0..1000]of longint;
      w1,w2,v,s:array[0..1000]of longint;
      n,m1,m2,i,j,k,l:longint;
    
    function max(a,b:longint):longint;
    begin
        if a>b then exit(a) else exit(b);
    end;
    
    begin
      readln(n,m1,m2);
      for i:=1 to n do readln(w1[i],w2[i],s[i],v[i]);
      for i:=1 to n do
        if s[i]=0 then
          for j:=w1[i] to m1 do
            for k:=w2[i] to m2 do
              f[j,k]:=max(f[j-w1[i],k-w2[i]]+v[i],f[j,k])
        else
          for j:=1 to s[i] do
            for k:=m1 downto w1[i] do
              for l:=m2 downto w2[i] do
                f[k,l]:=max(f[k-w1[i],l-w2[i]]+v[i],f[k,l]);
      writeln(f[m1,m2]);
    end.
  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412311.html
Copyright © 2011-2022 走看看