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

    暗黑破坏神
    【问题描述】
      游戏的主人公有n个魔法,每个魔法分为若干个等级,第i个魔法有p[i]个等级(不包括0),每个魔法的每个等级都有一个效果值,一个j级的i种魔法的效果值为w[i][j],魔法升一级需要一本相应的魔法书,购买魔法书需要金币,第i个魔法的魔法书价格为c[i],而小x只有m个金币(好孩子不用修改器)
      你的任务就是帮助小x决定如何购买魔法书才能使所有魔法的效果值之和最大,开始时所有魔法为0级效果值为0。
    【输入格式】diablo.in
      第一行用空格隔开的两个整数n,m。
      以下n行,描述n个魔法,第i+1行描述第i个魔法。格式如下
      c[i] p[i] w[i][1] w[i][2] ... w[i][p[i]]
    【输出格式】diablo.out
      第一行输出一个整数,即最大效果值。
      以后n行输出你的方案:
      第i+1行有一个整数v[i] 表示你决定把第i个魔法学到v[i]级
      如果有多解输出花费金币最少的一组
      如果还多解输出任意一组
    【输入样例】
      3 10
      1 3 1 2 2
      2 3 2 4 6
      3 3 2 1 10
    【输出样例】
      11
      1
      0
      3


    #include<iostream>
    using namespace std;
    int n,m;
    int v[101],c[101],p[101],w[101][51];
    int f[101][51],d[101][51];
    void shuchu(int a,int b)//递归输出所选择的每个魔法的等级
    {
    if(a==0) return ;
    else
    {
    shuchu(a-1,b-d[a][b]*c[a]);
    cout<<d[a][b]<<endl;
    }
    }
    int main()
    {
    cin>>n>>m; //n个魔法,m个金币
    for(int i=1;i<=n;i++)
    {
    cin>>c[i]>>p[i];//第i个魔法价格为c[i],有p[i]个等级
    for(int j=1;j<=p[i];j++)
    cin>>w[i][j];//第i个魔法的第j个等级的效果值为w[i][j]
    }
    for(int i=1;i<=n;i++)//i个魔法
    for(int j=1;j<=m;j++)//j个金币
    for(int k=0;k<=p[i];k++) //第i个魔法第k个等级
    {
    if(j<k*c[i]) break;//如果金币少于第i个魔法第k个等级的钱数 则跳出
    else //否则计算到第i个魔法花费j个金币所取得的最大效果值
    {
    f[i][j]=max(f[i][j],f[i-1][j-k*c[i]]+w[i][k]);
    d[i][j]=k;//d[i][j]表示第i个魔法花费j金币时选择的等级为k
    }
    }
    cout<<f[n][m]<<endl;
    shuchu(n,m);
    return 0;
    }

  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5325737.html
Copyright © 2011-2022 走看看