【错题集-编程题】合唱团(动态规划 - 线性 dp)

简介: 【错题集-编程题】合唱团(动态规划 - 线性 dp)

牛客对应题目链接:合唱团_牛客题霸_牛客网 (nowcoder.com)


一、分析题目

线性 dp


1、状态表示

f[i][j]:从前 i 个人中挑选出 j 个人,arr[i] 必选的最大乘积。

g[i][j]:从前 i 个人中挑选出 j 个人,arr[i] 必选的最小乘积。


2、返回值

返回 max(f[k][k] ~ f[n][k])


3、状态转移方程

f[i][j] = max(f[prev][j-1] * arr[i], g[prev][j-1] * arr[i]);(max(i-d, j-1) <= prev <= i-1)

f[i][j] = min(f[prev][j-1] * arr[i], g[prev][j-1] * arr[i]);(max(i-d, j-1) <= prev <= i-1)


4、初始化

  • f[i][j]=-INF,g[i][j]=INF(避免影响后续取值)
  • f[i][1] = g[i][1] = arr[i]

注意:这里的取值范围很大,所以要用到 long long 来存储结果,那么这里的 INF 可以设为 LLONG_MAX 或 0x3f3f3f3f3f3f3f3f。


二、代码

//值得学习的代码
#include <iostream>
using namespace std;
 
typedef long long LL;
 
const int N = 55, M = 15;
const LL INF = 0x3f3f3f3f3f3f3f3f;
 
int n, k, d;
LL arr[N];
LL f[N][M], g[N][M];
 
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> arr[i];
    cin >> k >> d;
 
    // 初始化放在填表中进⾏了
 
    for(int i = 1; i <= n; i++) // 填写每⼀⾏
    {
        g[i][1] = f[i][1] = arr[i];
        for(int j = 2; j <= min(i, k); j++) // 挑选⼏个⼈
        {
            f[i][j] = -INF; // 初始化
            g[i][j] = INF; // 初始化
            for(int prev = max(i - d, j - 1); prev <= i - 1; prev++) // 前⾯挑选的最后⼀个位置
            {
                f[i][j] = max(max(f[prev][j - 1] * arr[i], g[prev][j - 1] * arr[i]), f[i][j]);
                g[i][j] = min(min(f[prev][j - 1] * arr[i], g[prev][j - 1] * arr[i]), g[i][j]);
            }
        }
    }
 
    LL ret = -INF;
    for(int i = k; i <= n; i++) ret = max(ret, f[i][k]);
    cout << ret << endl;
 
    return 0;
}

三、反思与改进

这题真没有思路,加上前面的题目也没有通过全部样例,有点影响对这道题的思考。认真反思,汲取经验。


相关文章
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
编解码 安全 Java
【软件测试】进阶篇 -- 详解
【软件测试】进阶篇 -- 详解
|
小程序 安全 测试技术
【软件测试】用例篇 -- 详解(下)
【软件测试】用例篇 -- 详解(下)
|
算法 安全 测试技术
【软件测试】用例篇 -- 详解(上)
【软件测试】用例篇 -- 详解(上)
|
Web App开发 JavaScript 前端开发
【软件测试】自动化测试 Selenium 篇(一)
【软件测试】自动化测试 Selenium 篇(一)
|
7天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1797 10
|
12天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1644 3
|
12天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)
|
8天前
|
SQL 人工智能 前端开发
QoderWake 1.0 正式发布:从桌面里的 Agent,到工作现场的数字员工
QoderWake v1.0正式发布:企业级数字员工团队平台。支持“一句话建岗”,预置10类特训岗位;Waker常驻钉钉/飞书群,@即响应、自动协作、跨任务记忆;具备定时/事件/API多触发方式与统一任务看板;已沉淀27.6万条记忆、12.3万项技能,助力组织实现人机协同增效。
783 2
|
6天前
|
缓存 测试技术 API
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)
DeepSeek V4.1 Flash 内测不用申请,base_url 不变、改个模型名就能调,9/10 到期。本文讲清接入、计费限流与多模态注意点。
808 0
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)

热门文章

最新文章