4 条题解
-
9
这题的核心思路就是用题目的提示来判断能不能填充1 直接来看代码(此代码为不要三个一的目前最短代码 但不是最快的)
#include<cstdio> char s[101];int n,m,a,i; main(){freopen("three.in","r",stdin);freopen("three.out","w",stdout);scanf("%d%d",&n,&m);for(i=0;i<n&&a<m;++i)if(i<2||!(s[i-1]=='1'&&s[i-2]=='1'))s[i]='1',a++;else s[i]='0';while(i<n)s[i++]='0';printf("%s",s);} -
4
-
1
#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; }
- 1
信息
- ID
- 4487
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 651
- 已通过
- 96
- 上传者