社区讨论

WA on #20,求大佬调试,悬一关qwq

CF229D Towers参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m691oc2h
此快照首次捕获于
2025/01/23 16:01
去年
此快照最后确认于
2025/01/23 16:12
去年
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=5005;
int n,a[N],sum[N],dp[N][N];
//dp[i][j]表示前i个塔分为j段,最后一座塔的最小高度
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) 
		scanf("%d",a+i),sum[i]=sum[i-1]+a[i];
	memset(dp,0x3f,sizeof(dp));
	for(int i=1;i<=n;i++)
		dp[i][1]=sum[i];
	for(int j=2;j<=n;j++)
	{
		int x=1;
		while(x<=n and dp[x][j-1]==0x3f3f3f3f) x++;
		for(int i=j;i<=n;i++)
		{
			while(x<=n and dp[x][j-1]+sum[x]<=sum[i]) x++;
			if(x<=i and dp[x-1][j-1]!=0x3f3f3f3f) dp[i][j]=sum[i]-sum[x-1];	
		}
	}
	for(int i=n;i>=1;i--)
	{
		if(dp[n][i]!=0x3f3f3f3f)
		{
			cout<<n-i;
			return 0;
		}
	}
	return 0;
}
这是代码,错的那个点输出答案比正确答案多了1

回复

0 条回复,欢迎继续交流。

正在加载回复...