思路
- 可以进行广搜或dp
- 正解:考虑:
若x = 1 + 2 + 。。。 + n,则n一定是最优解
我们不妨设一开始全部都是往右跳,
考虑现在1+2+。。。+i的和为sum,
若sum < x肯定需要继续加,
若sum = x 则当前i是答案
若sum > x,则若(sum – x) % 2 = =0,则当前i是答案,
否则再继续加i,直到(sum – x) % 2 = = 0
(sum – x) % 2 = = 1 时,考虑每一次变化,相当于减去一个数的两倍,奇偶性不会改变,即怎么变也无法到达x
(sum – x) % 2 = = 0 时,我们需要用1,。。。,i凑出(sum – x) / 2,这个是一定可行的,考虑从i开始递减,能减就减。
可知在O(sqrt(x))内能够得出解
时间复杂度O(sqrt(x))
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
//freopen("jump.in","r",stdin);
//freopen("jump.out","w",stdout);
int x;
cin>>x;
x=abs(x);
int sum=0,i=0;
while(sum<x)
{
i++;
sum+=i;
}
if(sum==x||(sum-x)%2==0)
cout<<i<<endl;
else
{
while((sum-x)%2==1)
{
i++;
sum+=i;
}
cout<<i<<endl;
}
return 0;
}