悬关,这道题有没有什么优化空间的方法
  • 板块灌水区
  • 楼主weiy_
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/17 19:17
  • 上次更新2024/8/17 22:06:34
查看原帖
悬关,这道题有没有什么优化空间的方法
946180
weiy_楼主2024/8/17 19:17

rt

#include<bits/stdc++.h>
using namespace std;
int n,m;
int g[1005][105],dp[1005][105],ans=1e9,a[1005];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	memset(g,0x3f,sizeof(g));
	memset(dp,0x3f,sizeof(dp));
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++){
		for(int j=1;j<i;j++){
			dp[i][j]=a[i]+a[i-j];
			g[i][j]=min(g[i][j-1],dp[i][j]);
			if(n-(i-j)<m){

				ans=min(ans,dp[i][j]);
			} 
		}
	}
//	for(int i=1;i<=m;i++){
//		for(int j=1;j<i;j++){
//			cout<<i<<" "<<j<<": "<<"g[i][j]="<<g[i][j]<<"\n";
//		} 
//	}
//	for(int i=1;i<=m;i++){
//		for(int j=1;j<i;j++){
//			cout<<i<<" "<<j<<": "<<"dp[i][j]="<<dp[i][j]<<"\n";
//		} 
//	}
	for(int i=m+1;i<=n;i++){
		for(int j=1;j<m;j++){
			dp[i][j]=g[i-j][m-j]+a[i];
			g[i][j]=min(g[i][j-1],dp[i][j]);
//			cout<<g[i][j]<<"="<<"min("<<g[i][j-1]<<","<<dp[i][j]<<")\n";
			if(n-(i-j)<m){
				ans=min(ans,dp[i][j]);
			} 
		}
	}
	cout<<ans;
	return 0;
}
2024/8/17 19:17
加载中...