zoukankan      html  css  js  c++  java
  • P5365 [SNOI2017]英雄联盟

    题目描述

    正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」。

    现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!

    小皮球只会玩N 个英雄,因此,他也只准备给这 N 个英雄买皮肤,并且决定,以后只玩有皮肤的英雄。

    这 N 个英雄中,第 i 个英雄有 Ki 款皮肤,价格是每款Ci Q 币(同一个英雄的皮肤价格相同)。

    为了让自己看起来高大上一些,小皮球决定给同学们展示一下自己的皮肤,展示的思路是这样的:对于有皮肤的每一个英雄,随便选一个皮肤给同学看。

    比如,小皮球共有 5 个英雄,这 5 个英雄分别有 0,0,3,2,4 款皮肤,那么,小皮球就有 3 *2*4 = 243×2×4=24 种展示的策略。

    现在,小皮球希望自己的展示策略能够至少达到 M 种,请问,小皮球至少要花多少钱呢?

    输入输出格式

    输入格式:

    第一行,两个整数 N,M。

    第二行,N 个整数,表示每个英雄的皮肤数量 Ki

    第三行,N 个整数,表示每个英雄皮肤的价格 Ci

    输出格式:

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

    #include<bits/stdc++.h>
    using namespace std;
    long long int n,m;
    long long f[1000000];
    int val[100000],cnt[100000];
    inline int read() {
        char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
        while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
    }
    int main()
    {
        cin>>n>>m;
        f[0]=1;
        for(int i=1;i<=n;i++)cnt[i]=read();
        for(int i=1;i<=n;i++)val[i]=read();
        for(int i=1;i<=n;i++)
        for(int j=25000;j>=0;j--)
        for(int k=1;k<=cnt[i];k++)
        if(j>=k*val[i])f[j]=max(f[j],f[j-k*val[i]]*k);
        for(int i=1;i<=25000;i++)if(f[i]>=m){cout<<i;return 0;
        }
    }
  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/10887247.html
Copyright © 2011-2022 走看看