L - 养成游戏

小塔最近在玩一款培育养成类游戏,她培育的角色有 n 个属性,每个属性 Ai 是 0 到 K 的一个整数。这个游戏的终极目标是在最后的展示大会上获得最高的评分,最后的展示大会上有一些评委,每个评委都有各自的评判标准,当你达成了这个评委的评判标准,你就能获得这个评委的评分,评委的评判标准格式如下,可以由一个整数七元组 表示。

当 op 为 0 时,代表培育的角色满足 a × Ai + b × Aj ≤ d 时就可以获得 v 的评分。

当 op 为 1 时,代表培育的角色满足 a × Ai + b × Aj ≥ d 时就可以获得 v 的评分。

由于评委们也不想让自己的评分规则太麻烦,所以这里的a, b满足 - 1 ≤ a, b ≤ 1。

如果小塔能控制她养成的角色的属性的值,现在她问你她最高能在展示大会上获得多少评分呢?

Input
第一行两个整数 n, m, k (2 ≤ n ≤ 6, 1 ≤ m ≤ 100, 1 ≤ K ≤ 8)。

接着有 m 行,每行有七个整数 i, j, op, a, b, d, v,表示一组评委的评判标准。其中每个参数的具体限制如下:

Output
输出一个整数代表她可以获得的最高评分

Examples
Inputcopy Outputcopy
3 5 5
3 1 0 1 -1 0 4
3 1 0 1 1 2 2
3 1 0 1 0 1 3
3 2 1 1 1 2 0
3 2 1 1 -1 1 3
12
Inputcopy Outputcopy
3 5 5
1 2 1 -1 0 0 0
3 2 1 0 -1 3 2
2 3 0 -1 -1 0 4
3 1 1 1 0 0 0
1 3 0 0 1 2 9
13
Note
在第一个样例里,小塔培养的角色属性为 A1 = 1, A2 = 0, A3 = 1 时,可以获得 12 分。
(op ∈ 0,1,1 ≤ i,j ≤ n,i= j,−1 ≤ a,b ≤ 1,−10 ≤ d ≤ 10,0 ≤ v ≤ 108)

题目大意:获得最高的评分,数据范围很小6^8*100,可以直接枚举出所有属性值,依次判断是否符合裁判的评分要求,每次枚举出的分数取最大的

代码实现

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
struct x
{
    int i,j,op,a,b,d,v;
}b[110];
signed main()
{
    std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,m,k;cin>>n>>m>>k;
    for(int p=1;p<=m;p++)
    {
        cin>>b[p].i>>b[p].j>>b[p].op>>b[p].a>>b[p].b>>b[p].d>>b[p].v;
    }
    int c[10];
    int mx=INT_MIN,t;
    for(c[1]=0;c[1]<=k;c[1]++)
    for(c[2]=0;c[2]<=k;c[2]++)
    for(c[3]=0;c[3]<=k;c[3]++)
    for(c[4]=0;c[4]<=k;c[4]++)
    for(c[5]=0;c[5]<=k;c[5]++)
    for(c[6]=0;c[6]<=k;c[6]++)
    {
        t=0;
        for(int p=1;p<=m;p++)
        {
            if(b[p].v==0) continue;
            if(b[p].op==0)
            {
                if(b[p].a*c[b[p].i]+b[p].b*c[b[p].j]<=b[p].d)
                t+=b[p].v;
            }
            else if(b[p].op==1)
            {
                if(b[p].a*c[b[p].i]+b[p].b*c[b[p].j]>=b[p].d)
                t+=b[p].v;
            }
        }
        mx=max(mx,t);
    }
    cout<<mx;
    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值