zoukankan      html  css  js  c++  java
  • SSL 2295——暗黑破坏神

    Description

    无聊中的小x玩起了Diablo I…

    游戏的主人公有n个魔法

    每个魔法分为若干个等级,第i个魔法有p[i]个等级(不包括0)

    每个魔法的每个等级都有一个效果值,一个j级的i种魔法的效果值为w[i][j]

    魔法升一级需要一本相应的魔法书

    购买魔法书需要金币,第i个魔法的魔法书价格为c[i]

    而小x只有m个金币(好孩子不用修改器)

    你的任务就是帮助小x决定如何购买魔法书才能使所有魔法的效果值之和最大

    开始时所有魔法为0级 效果值为0

    Input

    第一行 用空格隔开的两个整数n(0
    以下n行 描述n个魔法

    第i+1行描述 第i个魔法 格式如下(0
    c[i] p[i] w[i][1] w[i][2] … w[i][p[i]]

    Output

    第一行输出一个整数,即最大效果

    Sample Input

    3 10
    1 3 1 2 2
    2 3 2 4 6
    3 3 2 1 10
    Sample Output

    11
    1
    0
    3
    Hint

    0< n< =100,0< m <=500,0 < p[i] <= 50,0 < c[i] <=10


    简单的背包,主要就是记录路径,再递归输出


    代码如下:

    const
      maxn=500;
    var
      f,a,b:array[0..maxn,0..maxn] of longint;
      c,p:array[0..maxn] of longint;
      i,j,k,n,m,maxf,x,y:longint;
    
    
    procedure print(x,y:longint);
    begin
      if x=0 then exit;
      print(x-1,y-b[x,y]*c[x]);
      writeln(b[x,y]);
    end;
    
    
    function max(x,y:longint):longint;
    begin
      if x>y then exit(x) else exit(y);
    end;
    
    
    begin
      readln(n,m);
      for i:=1 to n do
        begin
          read(c[i],p[i]);
          for j:=1 to p[i] do
            read(a[i,j]);
          readln;
        end;
      for i:=1 to n do
        for j:=1 to m do
          begin
            f[i,j]:=f[i-1,j];
            for k:=0 to p[i] do
              begin
                if k*c[i]>j then break;
                if f[i,j]<f[i-1,j-k*c[i]]+a[i,k] then
                  begin
                    f[i,j]:=f[i-1,j-k*c[i]]+a[i,k];
                    b[i,j]:=k;
                  end;
              end;
          end;
      writeln(f[n,m]);
      for j:=m downto 1 do
        for i:=n downto 1 do
          if f[i,j]>=maxf then
            begin
              maxf:=f[i,j];
              x:=i;
              y:=j;
            end;
      print(x,y);
      for i:=x+1 to n do
        writeln(0); 
    end.
  • 相关阅读:
    人类思考的基本形式
    晚上睡不者原因
    东西方哲学比较
    逻辑推理的三种方法
    锻炼自己的注意力和逻辑思维能力
    预测和复盘自己的投资策略
    概念:名与实
    没有“界定问题”会出现什么问题
    问题、联系-条条大路通罗马
    程序问题调试与医生、汽车维修师
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412309.html
Copyright © 2011-2022 走看看