牛客春招刷题训练营-2025.5.9题解

活动地址: 牛客春招刷题训练营 - 编程打卡活动

简单题 小红的顺子

为当前顺子长度,其初值为 ,如果 则将 增加 ,否则将 设成
同时用 记录整个过程的 的最大值。
输出 即为答案。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    n--;
    vector<int> a(n);
    for (int i = 0; i < n; i++)cin >> a[i];
    int ans = 1, now = 1;
    for (int i = 1; i < n; i++) {
        if (a[i] == a[i - 1] + 1) now++;
        else now = 1;
        ans = max(ans, now);
    }
    cout << ans << '\n';
    return 0;
}

中等题 小红的字符生成

可变成 可变成 ……发现为 的幂次关系。
即求 的二进制表示中所有 的位置。
的二进制表示第 位是 ,则输出

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    for (int i = 10; i >= 0; i--) {
        if (n >= (1 << i)) {
            n -= (1 << i);
            cout << char('a' + i);
        }
    }
    return 0;
}

困难题 最少的完全平方数

完全背包问题,相当于体积分别为 且数量无限多的物品装满体积为 的背包需要最少几个物品。
因存在体积为 的物品,所以背包一定能装满。
为装满体积为 的背包需要最少几个物品。
,否则
转移时,设 为完全平方数的底数,
答案为
时间复杂度 ,本做法将常数直接设成了 ,更优化常数的做法为

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> dp(n + 1, 1e9);
    dp[0] = 0;
    for (int i = 1; i <= 100; i++)
        for (int j = i * i; j <= n; j++)
            dp[j] = min(dp[j], dp[j - i * i] + 1);
    cout << dp[n] << '\n';
    return 0;
}
#牛客春招刷题训练营#
全部评论

相关推荐

爱喝奶茶的垂耳兔拥抱太阳:感觉项目和实习没有技术亮点和难点,单纯说了自己干了啥
点赞 评论 收藏
分享
头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务