2 条题解
-
5
#include<bits/stdc++.h> using namespace std; int dp[61][300005]; int main() { int n; cin>>n; int i,j; for(i=1;i<=n;i++) { int x; cin>>x; dp[x][i]=i+1; } int ans=0; for(i=2;i<=58;i++) { for(j=1;j<=n;j++) { if(!dp[i][j]) { dp[i][j]=dp[i-1][dp[i-1][j]]; } if(dp[i][j]) ans=i; } } cout<<ans; return 0; } -
4
#include<bits/stdc++.h> using namespace std; int f[1000][1000],t,n,ans; int main(){ cin>>n; for(int i=1;i<=n;i++) { cin>>t; //值为t的数字在位置i,合并后跳到i+1位置(表示i和i+1可合并为t+1) f[t][i]=i+1; } //i表示当前要计算的目标值(从2开始,因为初始值最小为1,合并后至少为2) for(int i=2;i<=40;i++){ for(int j=1;j<=n;j++){ if(f[i][j]==0){ f[i][j]=f[i-1][f[i-1][j]];//表示 值i-1在j的合并位置 再做一次i-1的合并 } if(f[i][j]!=0){//更新 ans=i; } } } cout<<ans; return 0; }
- 1
信息
- ID
- 2860
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 215
- 已通过
- 129
- 上传者