c++ - 使用数组声明会显示运行时错误,但在使用向量声明时可以正常工作。为什么?
问题描述
这是 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;
}
解决方案
推荐阅读
- mysql - “字段列表”中的未知列“u.MemberId”
- algorithm - 随机森林的可能算法
- excel - VBA - 自动工作表保护丢失密码
- css - 一列固定宽度的 HTML 表格,其他列流动且等宽
- python - 如何为 Android repo 工具实现 git hook
- ios - 维护 TableView 之间的数组顺序?
- nativescript - paymentAuthorizationViewControllerDidAuthorizePaymentHandler 中的 Nativescript 为空 PKPayment
- python-3.x - 为什么我的基于 tf2.0 训练的变压器没有任何问题就被杀死了?
- python - 我得到一个索引错误,我不知道为什么
- php - 如何定义到视图中另一个文件夹内的文件的路由?