原文链接:https://www.luogu.com.cn/problem/P1353
AC代码:
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int n,m;
int mapp[10005],dp[10505][505],maxn=0;
int main(){
int i,j;
memset(mapp,0,sizeof(mapp));
memset(dp,0,sizeof(dp));
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>mapp[i];
}
for(i=1;i<=n;i++){
for(j=0;j<=m&&j<=i;j++){
if(j==0){
dp[i][0]=max(dp[i][0],dp[i-1][0]);
dp[i][1]=max(dp[i][1],dp[i-1][0]+mapp[i]);
maxn=max(maxn,max(dp[i][0],dp[i][1]));
}
else{
dp[i+j][0]=max(dp[i+j][0],dp[i][j]);
maxn=max(maxn,dp[i+j][0]);
dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j]+mapp[i+1]);
maxn=max(maxn,dp[i+1][j+1]);
}//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
}
}
cout<<dp[n][0]<<endl;
return 0;
}
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int n,m;
int mapp[10005],dp[10505][505],maxn=0;
int main(){
int i,j;
memset(mapp,0,sizeof(mapp));
memset(dp,0,sizeof(dp));
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>mapp[i];
}
for(i=1;i<=n;i++){
for(j=0;j<=m&&j<=i;j++){
if(j==0){
dp[i][0]=max(dp[i][0],dp[i-1][0]);
dp[i][1]=max(dp[i][1],dp[i-1][0]+mapp[i]);
maxn=max(maxn,max(dp[i][0],dp[i][1]));
}
else{
dp[i][0]=max(dp[i-j][j],dp[i][0]);
maxn=max(maxn,dp[i][0]);
dp[i][j]=max(dp[i][j],dp[i-1][j-1]+mapp[i]);
maxn=max(maxn,dp[i][j]);
}//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
}
}
cout<<dp[n][0]<<endl;
return 0;
}