题意:给你一个有n个按钮的密码锁,n个按钮编号1~n,你必须按照正确的顺序依次按下它们,如果当前你按下的按钮是正确的,那么这个按钮就会被压下去,如果按错,那么所有已经被压下去的按钮就会全部弹出,例如n=3,正确顺序是1 3 2,如果你已经按下了1号按钮,那么当你再按2号按钮时,1号就会被弹出,你就会知道你按错了,现在你要暴力破解它,求出最坏情况下你要按多少次
设F(i)表示总共i个按钮最坏情况下需要按的次数,△F(i)表示总共i个按钮比总共i-1个按钮最坏情况下需要多按的次数
可以推出F(i) = F(i-1)+△F(i-1)+i-1,也就是F(i) = 2F(i-1)-F(i-2)+i-1
#include<stdio.h>
#include<algorithm>
using namespace std;
#define LL long long
int main(void)
{
int n, i;
LL ans, last;
ans = last = 1;
scanf("%d", &n);
for(i=2;i<=n;i++)
{
last = last+i-1;
ans += last;
}
printf("%lld\n", ans);
return 0;
}