TLE求助
查看原帖
TLE求助
605945
luo_xiaoran楼主2023/3/14 14:33

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;
}
2023/3/14 14:33
加载中...