求教
查看原帖
求教
221551
Bker_楼主2022/8/24 20:39

为什么我的最大值是对的,但是最小值一直爆0 /疑惑/疑惑/疑惑```cpp #include #include using namespace std; const int maxn = 1010 ;

int n , a[maxn] , sum[maxn] , f1[maxn][maxn] , f2[maxn][maxn] ;

int main(){ ios::sync_with_stdio(0); cin.tie(0) ; cout.tie(0) ; cin>>n; memset(sum , 0 , sizeof(sum)) ; for(int i = 1 ; i <= n ; i++){ cin>>a[i] ; sum[i] = sum[i - 1] + a[i] ; }

for(int i = n + 1 ; i <= 2 * n ; i++){
	a[i] = a[i - n] ;	
	sum[i] = sum[i - 1] + a[i];
}

for(int i = 1 ; i <= n + n ; i++)
	f1[i][i] = f2[i][i] = 0 ;

for(int len = 2 ; len <= n ; len++)
	for(int i = 1 ; i <= 2 * n - len + 1 ; i++){
		int j = i + len - 1 ;
		for(int k = i ; k < j ; k++){
			f1[i][j] = max(f1[i][j] , f1[i][k] + f1[k + 1][j] + sum[j] - sum[i - 1]);
			f2[i][j] = min(f2[i][j] , f2[i][k] + f2[k + 1][j] + sum[j] - sum[i - 1]) ;
		}
	}

int ans1 = -10000 , ans2 = 0x3fff ;

for(int i = 1 ; i <= n + 1 ; i++){
	ans1 = max(ans1 , f1[1][i + n - 1]) ;
	ans2 = min(ans2 , f2[1][i + n - 1]) ;
}

cout<<ans2<<endl;
cout<<ans1 ;

return 0 ;

}

2022/8/24 20:39
加载中...