• WHYZOJ-#93. 暗黑破坏神(垃圾01背包)


    【题目描述】:

    无聊中的小x玩起了Diablo I... 游戏的主人公有n个魔法,每个魔法分为若干个等级,第i个魔法有p[i]个等级(不包括0)。每个魔法的每个等级都有一个效果值,一个j级的i种魔法的效果值为w[i][j]。魔法升一级需要一本相应的魔法书。购买魔法书需要金币,第i个魔法的魔法书价格为c[i]。

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

    你的任务就是帮助小x决定如何购买魔法书才能使所有魔法的效果值之和最大。开始时所有魔法为0级,效果值为0。

    【输入描述】:

    第一行,用空格隔开的两个整数n m;

    以下n行,描述n个魔法;

    第i+1行描述,第i个魔法 格式如下:

    c[i] p[i] w[i][1] w[i][2] ... w[i][p[i]]

    【输出描述】:

    输出一个整数,即最大效果值。

    【样例输入】:

    3 10
    1 3 1 2 2
    2 3 2 4 6
    3 3 2 1 10

    【样例输出】:

    11

    【时间限制、数据范围及描述】:

    时间:1s 空间:128M

    0<n<=100

    0<m<=500

    0<p[i]<=50

    0<c[i]<=10

    保证输入数据和最终结果在longint范围内

    这题叫真几把简单,就是一最基本的01背包,然而当时我还以为是什么高级的多重背包或者其他什么神奇的背包……感冒果然什么都搞不好啊QAQ

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 const int MAX=505;
     5 int n,m;
     6 int c[MAX],p[MAX],w[MAX][MAX]={0};
     7 int f[MAX][MAX];
     8 inline int read(){
     9     int an=0,x=1;char c=getchar();
    10     while (c<'0' || c>'9') {if (c=='-') x=-1;c=getchar();}
    11     while (c>='0' && c<='9') {an=an*10+c-'0';c=getchar();}
    12     return an*x;
    13 }
    14 int main(){
    15     freopen ("godness.in","r",stdin);
    16     freopen ("godness.out","w",stdout);
    17     int i,j,k;
    18     n=read();m=read();
    19     for (i=1;i<=n;i++){
    20         c[i]=read(),p[i]=read();
    21         for (j=1;j<=p[i];j++){
    22             w[i][j]=read();
    23         }
    24     }
    25     memset(f,0,sizeof(f));
    26     for (i=1;i<=n;i++){
    27         for (j=0;j<=p[i];j++){
    28             for (k=m;k>=c[i]*j;k--){
    29                 f[i][k]=max(f[i][k],f[i-1][k-c[i]*j]+w[i][j]);
    30             }
    31         }
    32     }
    33     printf("%d",f[n][m]);
    34     return 0;
    35 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    走向变态的人生
    HDWIKI 4.0.2绿色版(含运行环境)(V1)
    centos7 安装python3.7.1
    一种高并发流控程序的简单轻量实现
    编写JDBC框架优化CRUD操作
    一段阻塞队列代码的纠错与优化
    一次请求在同一个事务实现
    创建Java内部类的编译错误处理
    C++模板简单分析与举例
    java.lang.OutOfMemoryError处理错误
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7523599.html
Copyright © 2020-2023  润新知