zoukankan      html  css  js  c++  java
  • ZUCC jiubei and TFT

    题意:

    jiubei的朋友们很喜欢玩TFT(Teamfight Tactics)。和大多数自走棋游戏一样,在TFT中有很多不 同种类的羁绊,每个被激活的羁绊会给予部分上场的英雄战斗力加成。jiubei的备战区有一些英雄,他 想知道怎么样能够使总战斗力最高的阵容得以上场。 为了简化问题,假设jiubei一共有 个英雄,只有 个英雄可以上场。另外,一共有 种羁绊。 每个英雄属于某些羁绊,在上场的英雄中,如果属于某个羁绊的英雄数量达到或者超过一些特定值,就 可以使这个羁绊触发,并使属于这个羁绊的所有上场英雄提高一定的战斗力。

    题解:

    直接暴力做,一开始题目意思没理解。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=45;
    typedef long long ll;
    int a[maxn][maxn];//第i种羁绊j个英雄加成多少
    int b[maxn][maxn];//第i种英雄是否属于第j种羁绊
    int c[maxn];//第i种英雄的战斗力
    int N,M,K;
    unordered_map<string,int> pos;
    ll mmax=-1;
    vector<int> tmp,path;
    void dfs (int v,int cnt) {
        if (cnt==K) {
            ll ans=0;
            int num[25]={0};
            for (int i=0;i<tmp.size();i++) {
                ans+=c[tmp[i]];
                for (int j=1;j<=M;j++) 
                    num[j]+=b[tmp[i]][j];
            } 
            for (int i=1;i<=M;i++) {
                ll Max=0;
                for (int j=1;j<=6;j++) {
                    Max=max(Max,(ll)a[i][j]*num[i]*(num[i]>=j));
                }
                ans+=Max;
            }
            if (ans>mmax) {
                mmax=ans;
                path=tmp;
            }
            return;
        }
        v++;
        while (v<=N+M+1) {
            tmp.push_back(v);
            dfs(v,cnt+1);
            tmp.pop_back();
            v++;
        }
    }
    int main () {
        scanf("%d%d%d",&N,&M,&K);
        string s;
        int t,x,y;
        for (int i=1;i<=M;i++) {
            cin>>s;
            pos[s]=i;
            scanf("%d",&t);
            for (int j=0;j<t;j++) {
                scanf("%d%d",&x,&y);
                a[i][x]=y;
            }
        }
        for (int i=1;i<=N;i++) {
            cin>>s;
            pos[s]=M+1+i;
            scanf("%d",&x);
            c[pos[s]]=x;
            scanf("%d",&t);
            for (int j=0;j<t;j++) {
                string s1;
                cin>>s1;
                b[pos[s]][pos[s1]]=1;
            }
        }
        dfs(M+1,0);
        printf ("%lld
    ",mmax);
        return 0;
    } 
  • 相关阅读:
    redis集群规范
    mongodb的基本使用
    redis进阶
    redis基本使用
    selenium的基本使用
    C++入门
    C语言入门
    MATLAB中矩阵reshape的顺序规律
    Tensorflow:ImportError: DLL load failed: 找不到指定的模块 Failed to load the native TensorFlow runtime
    差分定位和精密定位
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12463719.html
Copyright © 2011-2022 走看看