70WA求dalao

P1929 迷之阶梯

@[Lates](/user/119062) 头像好评
by HeartBlock_Love @ 2020-02-16 21:11:04


@[Lates](/user/119062) 您输出的f[n]是long long,但定义的是int,您可以改一下,看对不对(~~新兰CP~~)
by HeartBlock_Love @ 2020-02-16 21:13:04


@[愤怒的十九君](/user/177796) dalao我开long long了 `#define int long long`
by Lates @ 2020-02-16 21:15:06


@[Lates](/user/119062) 好吧,算我眼瞎
by HeartBlock_Love @ 2020-02-16 21:15:43


@[愤怒的十九君](/user/177796) orz
by Lates @ 2020-02-16 21:16:29


@[Lates](/user/119062) ``` if(a[i]+(1<<j-i)>=a[k]) ``` (j-i)打?括号
by HeartBlock_Love @ 2020-02-16 21:16:46


@[愤怒的十九君](/user/177796) 加减法比位运算先算的
by Lates @ 2020-02-16 21:17:53


@[Lates](/user/119062) 对不起,让我再看一下
by HeartBlock_Love @ 2020-02-16 21:19:18


@[愤怒的十九君](/user/177796) 谢谢
by Lates @ 2020-02-16 21:19:41


@[Lates](/user/119062) 在您的代码的基础上稍微改动了几点 ``` #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define int long long inline int read(){ register int x=0,v=1,ch=getchar(); while(!isdigit(ch)){if(ch=='-')v=-1;ch=getchar();} while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^'0');ch=getchar();} return x*v; } const int MAX=205; int n,f[MAX],a[MAX]; signed main(){ n=read(); for(register int i=1;i<=n;++i)a[i]=read(); memset(f,0x3f3f3f3f,sizeof(f)); f[1]=0; for(register int i=2;i<=n;++i){ if(a[i]==a[i-1]+1||a[i]==a[i-1]+1)f[i]=min(f[i],f[i-1]+1); } for(register int i=1;i<=n;++i){ for(register int j=i-1;j>0;--j){ for(register int k=j-1;k>0;--k){ if(a[k]+(1<<j-k)>=a[i]){ f[i]=min(f[i],f[j]+j-k+1); } } } } printf("%lld\n",f[n]>=0x3f3f3f3f?-1:f[n]); return 0; } ```
by HeartBlock_Love @ 2020-02-16 21:25:33


| 下一页