首页 > 解决方案 > 使用数组声明会显示运行时错误,但在使用向量声明时可以正常工作。为什么?

问题描述

这是 Max sum K-partitions 问题的解决方案,当我使用数组声明时,它会显示运行时错误,但适用于向量声明。想不通为什么?它们有何不同?

Max Sum K-partitions 问题陈述:Siraj 有一个包含 N 个整数和一个整数 K 的数组。他想在应用了一些条件的情况下创建该数组的子序列。他构建了这个数组的 ceil(N/K) 个块,每个块的大小为 [i∗K+1,min((i+1)∗k,N)],其中 0≤i≤N/K。对于这个子序列中的两个连续整数,他希望整数属于两个不同的块。(从每个块中获取一个整数并不是强制性的)。另外,假设这个子序列的任何两个整数的索引是 i 和 j,那么他想要 |i−j| != K. Siraj 取子序列中整数的总和。他想知道获得的最大金额是多少?帮助 siraj 解决这个问题。

#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;

ll maxsum(ll arr[], ll n, ll k){

    ll dp[n]={0};   // vector<ll> dp(n,0);
    ll max1=INT_MIN;
    ll max2=INT_MIN;
    ll maxind=-1;
    ll i = 0;
    for(i = 0 ; i < k ;i++){
        dp[i] = arr[i];
        if(arr[i] > max1){
            max2 = max1;
            max1 = arr[i];
            maxind = i;
            continue;
        }
        max2 = max(max2 , arr[i]);
    }


    while(count--){
        pos = i;
        for( ; i < min(n, pos+k) ; i++){
            dp[i] = arr[i];
            if(arr[i] >= 0 ){
                if(abs(i-maxind) != k){
                    dp[i] += max1;
                }else
                dp[i] += max2;
            }else
            dp[i] = max1;
        }

        for(i  = pos ; i < min(n,pos+ k) ; i++){
            if(dp[i] > max1){
                max2 = max1;
                max1 = dp[i];
                maxind = i;
                continue;
            }
            max2 = max(max2, dp[i]);
        }
    }    
    return max1;
}
int main(){
    ll n,k;
    cin>>n>>k;
    ll a[n];   //vector<ll> a(n);
    for(int i=0;i<n;i++)
        cin>>a[i];
    cout<<maxsum(a,n,k)<<"\n";
return 0;
}

标签: c++arraysvectordynamic

解决方案


推荐阅读