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

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

目录


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

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

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;
}

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

相关推荐
程序喵大人21 分钟前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
hanlin0328 分钟前
动态规划专练:力扣第121、122题
笔记·算法·leetcode
To_OC35 分钟前
LC 74 搜索二维矩阵:换皮的二分查找,我居然一开始没看出来
javascript·算法·leetcode
文心快码BaiduComate36 分钟前
文心快码荣获“中国优秀软件产品”,实力再获国家级认可
算法·代码规范
玖玥拾40 分钟前
LeetCode 189 轮转数组
算法·leetcode
ZhangShao06071 小时前
题解:CF2249B
c++·算法
小玮看世界1 小时前
[Python]线段树与二分法
数据结构·算法
Tisfy3 小时前
LeetCode 3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)
数学·算法·leetcode·题解·枚举
DolphinDB智臾科技4 小时前
告别 TB 级数据搬运:DolphinDB 滤波算法库,重塑物联网数据价值链
物联网·算法
可编程芯片开发4 小时前
基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真
算法