第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

牛客網(wǎng)12533,合唱團(tuán)題解:乘積最大化問題的動(dòng)態(tài)規(guī)劃解法

標(biāo)簽:
C++

https://img1.sycdn.imooc.com/0af34368087c5a5909670695.jpg

一、问题分析与算法设计

这是一个典型的动态规划问题,需要考虑正负值对乘积的影响。我们需要维护两个DP数组:一个记录最大值,一个记录最小值(因为负负得正)。

二、C++代码实现

#include <iostream>
#include <vector>
#include <climits>
using namespace std;
long long maxProduct(int n, vector<int>& ability, int k, int d) {
// dp_max[i][j]表示选j个人,最后一个人是i时的最大乘积
// dp_min[i][j]表示选j个人,最后一个人是i时的最小乘积
vector<vector<long long>> dp_max(n+1, vector<long long>(k+1, LLONG_MIN));
vector<vector<long long>> dp_min(n+1, vector<long long>(k+1, LLONG_MAX));
// 初始化:选1个人时就是自己的能力值
for(int i = 1; i <= n; i++) {
dp_max[i][1] = ability[i-1];
dp_min[i][1] = ability[i-1];
}
for(int j = 2; j <= k; j++) { // 选j个人
for(int i = j; i <= n; i++) { // 当前选第i个人
// 前一个人只能在[i-d, i-1]范围内
int start = max(j-1, i-d); // 至少需要j-1个人
for(int l = start; l < i; l++) {
// 考虑三种情况:正×正,负×负,正×负
dp_max[i][j] = max(dp_max[i][j],
max(dp_max[l][j-1] * ability[i-1],
dp_min[l][j-1] * ability[i-1]));
dp_min[i][j] = min(dp_min[i][j],
min(dp_max[l][j-1] * ability[i-1],
dp_min[l][j-1] * ability[i-1]));
}
}
}
// 找出选k个人时的最大乘积
long long result = LLONG_MIN;
for(int i = k; i <= n; i++) {
result = max(result, dp_max[i][k]);
}
return result;
}
int main() {
int n, k, d;
cin >> n;
vector<int> ability(n);
for(int i = 0; i < n; i++) cin >> ability[i];
cin >> k >> d;
cout << maxProduct(n, ability, k, d) << endl;
return 0;
}


三、算法解析

  1. 数据结构设计

  • 使用两个二维数组分别存储最大值和最小值

  • 考虑正负值对乘积的影响

关键处理逻辑

  • 三重循环处理状态转移

  • 每次考虑前d个位置的可能情况

  • 同时维护最大值和最小值

复杂度分析

  • 时间复杂度:O(nkd)

  • 空间复杂度:O(n*k)

来源:牛客网12533,合唱团题解:乘积最大化问题的动态规划解法


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消