70分代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,s[510],dp[510][510];
int f(int l,int r){
int sum=0;
for(;l<r;l++,r--){
sum+=s[r-1]-s[l-1];
}
return sum;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=505;i++)
for(int j=1;j<=505;j++)
dp[i][j]=0x7f7f7f;
for(int i=1;i<n;i++){
int a;
scanf("%d",&a);
s[i]=s[i-1]+a;
dp[i][i]=0;
}
dp[n][n]=0;
for(int i=1;i<=n;i++)
dp[i][1]=f(1,i);
for(int i=2;i<=n;i++)
for(int j=2;j<=m&&j<=i;j++)
for(int k=j-1;k<i;k++)
dp[i][j]=min(dp[i][j],dp[k][j-1]+f(k+1,i));
printf("%d",dp[n][m]);
return 0;
}
改了之后连样例都过不了的代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,s[510],dp[510][510],f[510][510];
int fa(int l,int r){
int sum=0;
for(;l<r;l++,r--){
sum+=s[r-1]-s[l-1];
}
return sum;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
f[i][j]=fa(i,j);
for(int i=1;i<=505;i++)
for(int j=1;j<=505;j++)
dp[i][j]=0x7f7f7f;
for(int i=1;i<n;i++){
int a;
scanf("%d",&a);
s[i]=s[i-1]+a;
dp[i][i]=0;
}
dp[n][n]=0;
for(int i=1;i<=n;i++)
dp[i][1]=f[1][i];
for(int i=2;i<=n;i++)
for(int j=2;j<=m&&j<=i;j++)
for(int k=j-1;k<i;k++)
dp[i][j]=min(dp[i][j],dp[k][j-1]+f[k+1][i]);
printf("%d",dp[n][m]);
return 0;
}