【今日三题】经此一役小红所向无敌(模拟) / 连续子数组最大和(动态规划) / 非对称之美(贪心)

⭐️个人主页:@小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

目录


经此一役小红所向无敌(模拟)

简单枚举会超时,可以根据题意做一下最大优化,先求出对立和光的血量最多能接收多少次对方的攻击,在判断剩下的最后一次攻击。

cpp 复制代码
#include <iostream>
using namespace std;

using ll = long long;

int main()
{
    ll a, h, b, k;
    cin >> a >> h >> b >> k;
    ll res = 0;
    int cnt = min(h / b, k / a);
    res += (a + b) * cnt;
    h -= cnt * b;
    k -= cnt * a;
    if (h > 0 && k > 0)
    {
        res += a + b;
        // 这次减完后必然至少有一方死亡
        h -= b;
        k -= a;
    }
    if (h > 0 || k > 0)
        res += 10 * (h > 0 ? a : b);
    cout << res << endl;
    return 0;
}

连续子数组最大和(动态规划)

经典线性dp问题。

cpp 复制代码
#include <iostream>
using namespace std;

const int N = 2e5 + 10;
int dp[N];
int res = -0x3f3f3f3f;

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) 
    {
        int x; cin >> x;
        dp[i] = max(dp[i - 1], 0) + x;
        res = max(res, dp[i]);
    }
    cout << res << endl;
    return 0;
}

非对称之美(贪心)

  • 如果字符串是回文串,并且不是由同一个字符组成,则最长非回文串就是把原回文串左右任意删去一个字符;
  • 如果是回文串且所有字符相同,则答案为0;
  • 如果本身不是回文串,则返回原字符串长度。
cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    string s;
    cin >> s;
    int n = s.size();
    int l = 0, r = n - 1;
    while (s[l] == s[r]) l++, r--;
    if (l >= r) // 是回文串
    {
        // 判断所有字符是否都相同
        int flag = 1;
        for (auto ch : s)
        {
            if (s[0] != ch)
            {
                flag = 0;
                break;
            }
        }
        if (flag) cout << 0 << endl;
        else cout << n - 1 << endl;
    }
    else cout << n << endl;
    return 0;
}

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

相关推荐
朝朝又沐沐4 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
薰衣草23334 小时前
一天两道力扣(6)
算法·leetcode
剪一朵云爱着5 小时前
力扣946. 验证栈序列
算法·
遇见尚硅谷5 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
天天开心(∩_∩)5 小时前
代码随想录算法训练营第三十二天
算法
YouQian7725 小时前
(AC)缓存系统
算法·缓存
艾莉丝努力练剑5 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
科大饭桶6 小时前
数据结构自学Day13 -- 快速排序--“前后指针法”
数据结构·算法·leetcode·排序算法·c
李永奉6 小时前
C语言-流程控制语句:for循环语句、while和do…while循环语句;
c语言·开发语言·c++·算法
程序员-King.6 小时前
day69—动态规划—爬楼梯(LeetCode-70)
算法·动态规划