题意:给定一列数组,同构改变每个元素的符号来操纵最后的和,求一种改变方案,使最终的和大于等于零小于等于a1.注意到输入的限制 a[i-1]<=a[i]<=2*a[i-1];
做法:递推公式 x=a[n]-a[n-1]<=a[n-1],abs(a[n-2]-x)<=a[n-2],....依次递推,最后推到a1项,得到的值符合题意.那么,建立一个记录变化的数组t,和一个记录当前符合的变量ope,就可以了。具体看出程序...
#include<cstdio>
#include<cstring>
#include<cstring>
#define LMT 100005
//这根本就是递推...,数列题记得用一下递推公式...an-a(n-1)
bool t[LMT],fu[LMT];
int a[LMT],s;
int main(void)
{
int n;
bool op;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=n-1;i>=0;i--)
if(s>=a[i])s-=a[i];
else
{
s=a[i]-s;
t[i]=1;
}
op=0;
for(int i=0;i<n;i++)
{
op^=t[i];
printf("%c",op?'+':'-');
}
return 0;
}
本文介绍了一种通过改变数组中元素的符号来调整数组总和的方法,确保其落在特定区间内。利用递推思想从数组末尾向前计算,通过变换实现目标区间内的和。
753

被折叠的 条评论
为什么被折叠?



