dfs过了,是老师讲的,自己做了一遍dp,只有84分!!求助
查看原帖
dfs过了,是老师讲的,自己做了一遍dp,只有84分!!求助
703319
Sylvia_starx楼主2022/10/15 15:25

蒟蒻文化有限,请求支援!!!

#include<bits/stdc++.h>
using namespace std;
int h[25],n,b,minn = 1e9,sum,dp[25]; 
int main(){
	cin>>n>>b;
	for(int i=1;i<=n;i++)
	{
		cin>>h[i];
		sum += h[i];
	}
	dp[1] = h[1];
	for(int i=2;i<=n;i++)
	{
		if(dp[i-1] - b >= 0 && dp[i-1] - b < dp[i-1] - b + h[i])
			dp[i] = dp[i-1];
		else if(dp[i-1] - b < 0 && dp[i-1] - b  + h[i] < 0)
			dp[i] = max(dp[i-1],dp[i-1] + h[i]);
		else
			dp[i] = dp[i-1] + h[i];
	}
	int tot = dp[n] - b;
	for(int i=1;i<=n;i++)
		if(h[i] <= tot)
			tot -= h[i];
	cout<<tot<<endl;
	return 0;
}
2022/10/15 15:25
加载中...