40分,求助debug
查看原帖
40分,求助debug
1452954
Liu_Chu_yao楼主2024/12/7 22:23
#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int f[210][210];//f[i][j]表示从i堆到j堆的最大情况
int g[210][210];//最小
int a[210];
int main(){
	int N;
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &a[i]);
		a[i + N] = a[i];
	}
	for(int i=0;i<2*N-1;i++)
	{
		f[i][i + 1] = a[i] + a[i + 1];
		g[i][i + 1] = a[i] + a[i + 1];
	}
	for (int i = 0; i < 2 * N-1; i++)
	{
		for (int j = i+1; j < 2 * N; j++)
		{
			if (j - i >= N)
			{
				continue;
			}
			int max = 0;
			for (int k = i+1; k < j; k++)
			{
				max = max > (f[i][k] + f[k + 1][j]) ? max : (f[i][k] + f[k + 1][j]);
			}
			int min = max;
			for (int k = i+1; k < j; k++)
			{
				min = min < (g[i][k] + g[k + 1][j]) ? min : (g[i][k] + g[k + 1][j]);
			}
			int sum = 0;
			for (int k = i; k <= j; k++)
			{
				sum += a[k];
			}
			f[i][j] = max + sum;
			g[i][j] = min + sum;
		}
	}
	int max = 0;
	for (int i = 0; i <= N; i++)
	{
		max = max > f[i][i + N-1] ? max : f[i][i + N-1];
	}
	int min = max;
	for (int i = 0; i <= N; i++)
	{
		min = min < g[i][i + N-1] ? min : g[i][i + N-1];
	}
	printf("%d\n%d", min, max);
	return 0;
}

想问一下友友们代码问题在哪里,只过了第1、5个数据点,求助求助

2024/12/7 22:23
加载中...