CodeForces - 1394A - Boboniu Chats with Du (贪心 + 枚举)

简介: 笔记

Boboniu Chats with Du


题意

n 个快乐因子有两种, 一种大于m ,一种小于等于m ,某一天选了第一种时 ,接下来的 d天(不包括选的这一天) 都会被禁言,不能累加别的快乐因子。若选择了第二种则没有影响 ,问怎样选择才能使 n天的快乐因子和最大


思路

枚举选多少个第一种快乐因子即可 首先若选第一种快乐因子肯定选大的,因为选了后同样都是禁言 d天第二种快乐因子也类似 能选就选大的,所以先将两种按降序排序,然后枚举选多少次第一种快乐因子,将res 赋初值为sum1[n] 所以可以不用枚举等于 0的情况


还需要注意的是,若将大于 m 的快乐因子放在最后一天,只会被禁言一天,所以每次枚举都将其中一个放在最后一天


代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 998244353
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 100100;
LL n, d, m;
LL a[N], b[N];
LL sum1[N], sum2[N];
bool cmp(int a, int b) {
    return a > b;
}
void solve() {
    cin >> n >> d >> m;
    LL  cnt1 = 0, cnt2 = 0;
    for (LL i = 1; i <= n; ++i) {
        LL x; cin >> x;
        if (x <= m)a[++cnt1] = x;
        else b[++cnt2] = x;
    }
    sort(a + 1, a + cnt1 + 1, cmp);
    sort(b + 1, b + cnt2 + 1, cmp);
    for (LL i = 1; i <= n; ++i)
        sum1[i] = sum1[i - 1] + a[i];
    for (LL i = 1; i <= cnt2; ++i) {
        sum2[i] = sum2[i - 1] + b[i];
    }
    LL res = sum1[n];
    for (LL i = 1; i <= cnt2; ++i) { //枚举选几个 大于 m 的
        LL sum = sum2[i];
        LL rem = (i - 1) * (d + 1) + 1;
        if (rem > n)break;
        rem = n - rem;
        res = max(res, sum + sum1[rem]);
    }
    cout << res << endl;
}
int main(){
    //int t; cin >> t;
    //while(t--)
        solve();
    return 0;
}


目录
相关文章
|
4月前
【每日一题Day155】LC1630等差子数组 | 枚举+排序
【每日一题Day155】LC1630等差子数组 | 枚举+排序
34 0
|
4月前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
4月前
|
算法
【动态规划刷题 18】(hard)回文子串&& (hard)最长回文子串
【动态规划刷题 18】(hard)回文子串&& (hard)最长回文子串
A. Codeforces Checking(打表枚举)
A. Codeforces Checking(打表枚举)
45 0
|
机器学习/深度学习 Java
【每日一题Day64】LC1799N 次操作后的最大分数和 | 状态压缩dp 状态压缩+dfs+记忆化搜索
每个数字有两种状态,删除或者未删除,因此可以使用状态压缩记录未删除的数字情况state,便于使用位运算进行状态的遍历及转移;使用状态压缩dp找到将所以数字删除的最大分数
97 0
【每日一题Day64】LC1799N 次操作后的最大分数和 | 状态压缩dp 状态压缩+dfs+记忆化搜索
|
机器学习/深度学习 Windows
The 2022 ICPC Asia Regionals Online Contest (I)-D题题解(DFS暴搜+剪枝+打表去重+二分)
时间复杂度:O(227 + nlog(n) + T * log(n)),227是DFS打表的时间,nlog(n)是vertor排序的时间,T*log(n)是询问次数和二分搜答案的时间。(如果算错了,评论或者私信指出谢谢)
155 0
The 2022 ICPC Asia Regionals Online Contest (I)-D题题解(DFS暴搜+剪枝+打表去重+二分)
codeforces144——D. Missile Silos(最短路+枚举)
codeforces144——D. Missile Silos(最短路+枚举)
87 0
codeforces144——D. Missile Silos(最短路+枚举)
|
人工智能 算法 JavaScript
Leedcode 327.区间和的个数:hard
Leedcode 327.区间和的个数:hard
80 0
|
机器学习/深度学习
Codeforces1499——C. Minimum Grid Path(思维+分奇偶+贪心)
Codeforces1499——C. Minimum Grid Path(思维+分奇偶+贪心)
87 0
|
机器学习/深度学习 人工智能 算法
CF1446D Frequency Problem(思维 前缀和 根号分治 双指针)
CF1446D Frequency Problem(思维 前缀和 根号分治 双指针)
85 0