列表

详情


NC227940. 终别

描述


不愿对你言说感谢,

始终将它埋藏心中,

离别总是在纯洁无瑕的,

梦境过后 悄然降临,

纷纷飘落在双手间的碎片,

无论何时 无论何时都要紧紧握住,

敢于笑到最后的那份坚强,

已然深有体会。

——《Last Regrets》


小P要退役了,可他仍然喜欢信息以及从信息中认得的那些人,无论他们是否曾相识……
珂朵莉面对了共只十七兽,它们站成一排,每只十七兽站在一个位置上,她的斩击可以使连续位置上的十七兽(可以只使一只,或相邻两只受到伤害),每一只受到一点伤害,当一个十七兽的血量归零时,视为该十七兽被消灭(但位置仍然保留),她还拥有一个魔法,魔法可以在战斗的任意时刻使用,但只能使用一次,可以直接消灭相邻的个位置上的十七兽(只有一只也可以使用,位置仍然保留),请问,她最少需要挥出多少次斩击,能够消灭所有十七兽?因为她已经筋疲力尽了,所以需要聪明的你来帮帮她!

输入描述

第一行一个数,分别表示十七兽的数量
第二行共n个整数,第i个整数表示,表示第i只十七兽的血量



输出描述

共一个数,表示珂朵莉需要挥出的斩击数

示例1

输入:

3
2 0 1

输出:

1

说明:

对1,2位置使用魔法,对3造成伤害,共斩击1次

示例2

输入:

10
3 2 2 2 3 1 1 2 1 2

输出:

5

说明:

对1,2使用魔法,接下来的斩击位置为:
3 4 5
3 4 5
5 6 7
8 9 10
8 9 10

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 315ms, 内存消耗: 12092K, 提交时间: 2021-10-27 11:25:51

#include <bits/stdc++.h>
using namespace std;
int n,a[1000005],b[1000005],c[1000005];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[i]=a[i];
	}
	long long l=0,r=0,ans=0;
	for(int i=n;i>=3;i--)
	{
		if(a[i]>0)
		{
			r+=a[i] ;
			a[i-1]-=a[i];
			a[i-2]-=a[i];
		}
	}
	ans=r;
	for(int i=2;i<=n-1;i++)	
	{
		if(a[i+1]>0)
			r-=a[i+1];
		c[i-1]+=b[i-1];
		if(c[i-1]>0)
		{
			l+=c[i-1];
			c[i]-=c[i-1];
			c[i+1]-=c[i-1];
		}
		ans=min(ans,l+r); 
	}
	cout<<ans<<endl;
	return 0;
}

上一题