沈阳化工大学第十一届程序设计沈阳区竞赛:凿冰 Action(博弈论,思维)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

北极探险队有新收获了!!!

北极探险队发现了NNN条长度不一的冰柱,由于冰柱里封存有价值的生物,现在需要两名生物学家小A和小B对冰柱进行分析,公平起见,探险队将每条冰柱都均分成长度为1的冰块,现在规定两位生物学家开始轮流选择冰块,小A先选,每次选择小A只能在任意一条没被选空的冰柱的最左边选择一个长度为1的冰块,而小B只能在任意一条没被选空的冰柱的最右边选择一个长度为1的冰块;

依据题意,上述这条冰柱,小A会选择左边四个冰块 价值为33+17+2+6=58,33 + 17 + 2 + 6 = 58,33+17+2+6=58, 同理小B选择右边三个的价值为11+18+19=48.11 + 18 + 19 = 48.11+18+19=48.

问:若两位生物学家都采用最优策略,那么 小A 和 小B 的能选到的冰块价值最后分别是多少?

输入描述:

 

第一行输入一个n(1≤n≤105)n(1 \leq n \leq 10^5)n(1≤n≤105), 表示冰柱数量。

接下来nnn行,
每行第一个数字x(0≤x≤105)x (0 \leq x \leq 10^5)x(0≤x≤105),表示将冰柱分成xxx个冰块,紧接着输入xxx个数字aia_iai​,每个ai(1≤ai≤109)a_i(1 \leq a_i \leq 10^9)ai​(1≤ai​≤109)表示每个冰块的价值。

数据保证xxx之和不超过2×105;2 × 10^5;2×105;

输出描述:

分别输出 小A的分数 和 小B的分数。

示例1

输入

复制1 7 33 17 2 6 11 18 19

1
7 33 17 2 6 11 18 19

输出

复制58 48

58 48

示例2

输入

复制3 4 15 18 17 16 2 1 3 1 20

3
4 15 18 17 16
2 1 3
1 20

输出

复制54 36

54 36

做法

如果是奇数,就两人分别取左右两边,最后剩一个数存起来;如果是偶数,就直接两人取左右两边。最后存起来的那些数,两人都取剩下中最大的。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,x,a[N];
int ans1,ans2;
signed main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    cin>>n;
    vector<int> v;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        vector<int> g(x+1);
        for(int j=1;j<=x;j++){
            cin>>g[j];
        }
        
        if(x%2){
            for(int j=1;j<=x/2;j++){
                ans1+=g[j];
            }
            v.push_back(g[x/2+1]);
            for(int j=x/2+2;j<=x;j++){
                ans2+=g[j];
            }
        }
        
        else{
            for(int j=1;j<=x/2;j++){
                ans1+=g[j];
            }
            for(int j=x/2+1;j<=x;j++){
                ans2+=g[j];
            }   
        }   
    }
    sort(v.begin(),v.end());
    int cnt=0;
    for(int i=v.size()-1;i>=0;i--){
        if(cnt%2==0) ans1+=v[i];
        else ans2+=v[i];
        cnt++;
    }
    cout<<ans1<<" "<<ans2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值