zoukankan      html  css  js  c++  java
  • BZOJ5018[Snoi2017]英雄联盟——DP

    题目描述

    正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」。现在,小皮球终于受不
    了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!小皮球只会玩N个英雄,因此,他也只准备给这N个英
    雄买皮肤,并且决定,以后只玩有皮肤的英雄。这N个英雄中,第i个英雄有Ki款皮肤,价格是每款CiQ币(同一个
    英雄的皮肤价格相同)。为了让自己看起来高大上一些,小皮球决定给同学们展示一下自己的皮肤,展示的思路是
    这样的:对于有皮肤的每一个英雄,随便选一个皮肤给同学看。比如,小皮球共有5个英雄,这5个英雄分别有0,0,
    3,2,4款皮肤,那么,小皮球就有3*2×4=24种展示的策略。现在,小皮球希望自己的展示策略能够至少达到M种,
    请问,小皮球至少要花多少钱呢?

    输入

    第一行,两个整数N,M
    第二行,N个整数,表示每个英雄的皮肤数量Ki
    第三行,N个整数,表示每个英雄皮肤的价格Ci
    共 10 组数据,第i组数据满足:N≤max(5,(log2i)^4) M≤10^17,1≤Ki≤10,1≤Ci≤199。保证有解

    输出

    一个整数,表示小皮球达到目标最少的花费。

    样例输入

    3 24
    4 4 4
    2 2 2

    样例输出

    18
     
    观察数据范围,可以发现m很大,但n最大是(log210)4,也就是(3.xxxx)4不到250,所花钱数最多是n*k*c也就是5*105。所以可以以花的钱数为状态来转移(即f[i]表示花了i元所能获得的最大展示方案数),这样问题就转化成了多重背包问题。最后从小到达枚举价格,找到第一个f[i]>=m就OK了。(亲测花的钱数开5*104就能过qwq)
    最后附上代码。
    #include<queue>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    int k[250];
    int c[250];
    int sum;
    long long m; 
    long long f[250][50000];
    int main()
    {
        scanf("%d%lld",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&k[i]);
        }
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&c[i]);
        }
        f[0][0]=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=sum;j++)
            {
                f[i][j]=f[i-1][j];
            }
            for(int j=2;j<=k[i];j++)
            {
                for(int l=c[i]*j;l<=sum+c[i]*j;l++)
                {
                    f[i][l]=max(f[i][l],f[i-1][l-c[i]*j]*j);
                }
            }
            sum+=k[i]*c[i];
        }
        for(int i=1;i<=sum;i++)
        {
            if(f[n][i]>=m)
            {
                printf("%d",i);
                return 0;
            }
        }
    }
  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/Khada-Jhin/p/9138142.html
Copyright © 2011-2022 走看看