zoukankan      html  css  js  c++  java
  • 【USACO】电子游戏 有条件的背包

    题目描述

    翰的奶牛玩游戏成瘾!本来约翰是想把她们拖去电击治疗的,但是他发现奶牛们在玩游戏后生产
    了更多的牛奶,也就支持它们了。
    但是,奶牛在选择游戏平台上的分歧很大:有些奶牛想买 Xbox 360 来跑《光晕 3》;有的奶牛想
    要任天堂 Wii 来跑《明星大乱斗 X》;还有奶牛想要在 PlayStation 3 上玩《潜龙谍影 4》。约翰只有
    V 元钱,不够多,要做一些取舍才行。
    已知市面上有 K 种游戏平台,如果想玩第 i 种平台的游戏,必须先买一台该平台的游戏机,价
    格为 C i 。第 i 种平台上有 S i 种游戏,其中第 j 个游戏的价格为 P i,j ,奶牛玩过这个游戏后的产出为
    E i,j 。如果想玩同一平台上的多个游戏,只要买一台游戏机就够了。请帮助约翰选择买哪些游戏机和
    游戏,才能使奶牛的产奶效益之和最大?注意同一个游戏买两次是不会产生双倍效益产生的。

    输入

    • 第一行:两个整数 K 和 V ,1 ≤ K ≤ 50,1 ≤ V ≤ 10 6
    • 第二行到第 K + 1 行:第 i + 1 行首先有两个整数 C i 和 S i ,1 ≤ C i ≤ 10 6 ,1 ≤ S i ≤ 10,其次
    有 S i 对整数 P i,j 和 E i,j ,1 ≤ P i,j ≤ 10 6 ,1 ≤ E i,j ≤ 10 6

    输出

    • 单个整数:表示可以得到的最大产出之和

    样例输入

    3 800 300 2 30 50 25 80 600 1 50 130 400 3 40 70 30 40 35 60

    样例输出

    210

    提示

     购买第一种游戏平台上的第二个游戏,以及


    第三种游戏平台上的第一个和第三个游戏,恰好

    花去 300 + 25 + 400 + 40 + 35 = 800 元,产出为

    80 + 70 + 60 = 210
     
     
    题解:
    捆绑背包加强版,分选该平台和不选两种情况 于是我们设F[i][j]为前i个平台花j元的最大产出
    我们假设买了该平台,设nd为买该平台的钱 那么F[i][j]=F[i-1][j-nd] 先转移过来
    然后再用所有的游戏进行01背包 然后枚举需要限制.
    背包完之后拿F[i][j]和F[i][j-1]比较,表示选不选该平台
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=55,MAXN=1000005;
     7 int F[N][MAXN];
     8 int gi(){
     9     int str=0;char ch=getchar();
    10     while(ch>'9'||ch<'0')ch=getchar();
    11     while(ch>='0' && ch<='9')str=str*10+ch-48,ch=getchar();
    12     return str;
    13 }
    14 int main()
    15 {
    16     int n=gi(),m=gi(),nd,num=0,x,y;
    17     for(int i=1;i<=n;i++)
    18     {
    19         nd=gi();num=gi();
    20         for(int j=nd;j<=m;j++)F[i][j]=F[i-1][j-nd];
    21         for(int j=1;j<=num;j++)
    22         {
    23             x=gi();y=gi();
    24             for(int k=m;k>=x+nd;k--)
    25             {
    26                 F[i][k]=max(F[i][k-x]+y,F[i][k]);
    27             }
    28         }
    29         for(int j=0;j<=m;j++)F[i][j]=max(F[i][j],F[i-1][j]);
    30     }
    31     printf("%d",F[n][m]);
    32     return 0;
    33 }
     
  • 相关阅读:
    Django 常用过滤器
    计算机概论(2)
    计算机概论(1)
    Django URL视图
    模板标签之if、for
    Django 渲染模板、路径配置、变量使用。

    字符串用法
    hashlib模块
    小列
  • 原文地址:https://www.cnblogs.com/Yuzao/p/6992342.html
Copyright © 2011-2022 走看看