4 条题解

  • 1
    @ 2026-5-2 10:09:20
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N=210;
    int dp[N],a[N],n;
    signed main(void) {
    	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	fill(dp,dp+n+1,0x3f3f3f3f3f3f3f3f);dp[1]=0;
    	for(int i=1;i<=n;i++){
    		if(a[i+1]==a[i]+1) dp[i+1]=min(dp[i+1],dp[i]+1);
    		for(int j=1;j<i;j++){
    			for(int k=i;k<=n;k++){
    				if(a[k]<=a[i-j]+(1ll<<j)) dp[k]=min(dp[k],dp[i]+j+1);
    			}
    		}
    	}
    	cout<<(dp[n]==0x3f3f3f3f3f3f3f3f?-1:dp[n])<<'\n';
    	return 0;
    }
    
    

    信息

    ID
    4487
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    (无)
    递交数
    651
    已通过
    96
    上传者