B. Menci 的序列

题解:

首先subtask1直接状压暴力就好

subtask2我的处理和题解不太一样

仍然正向考虑

设i的时候有最高位为j,那么这个时候数一定越大越好(这个比较好yy)

然后$f[i][j]$搞个高精度dp就可以了

复杂度$(n^3/64)$

我懒得手写了。。就写了$n^3$的

还有bitset本地开O2 0.5s 不开O2 32s 真可怕

subtask4

显然我们会先用1,然后到一定时候为了保证位数有0就得用

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
bitset<510> f[600][600];
const int N=2e6;
char c[N];
#define te bitset<510>
IL bool pd1(te B,int k)
{
  rep(i,1,k) if (B[i]!=1) return(0);
  return(1); 
}
IL te plu(te B1)
{
  te B=B1;
  int i;
  for (i=1;i<=500;i++) if (B[i]==0) break;
  B[i]=1;
  i--;
  for (;i>=1;i--) B[i]=0;
  return B;
}
bool pd(te x,te y)
{
  for (int i=500;i>=1;i--)
  { 
    if (x[i]>y[i]) return 0;
    if (x[i]<y[i]) return 1;
  }
  return 0;
}
IL void maxa(te &a,te b)
{
  if (pd(a,b)) a=b;
}
te ans;
int n,m;
namespace subtask4{
  int f[N];
  void solve()
  {
    dep(i,n,1) if (c[i]=='*') f[i]=f[i+1]+1;
    else f[i]=f[i+1];
    bool tt=0;
    int cnt=0,cnt3=0;
    rep(i,1,n)
    {
      if (c[i]=='+')
      {
        cout<<1; tt=1; cnt++; cnt3=0;
      } else
      {
        cnt3++;
        if (cnt3>1&&tt&&f[i]<m-cnt) { cout<<0; cnt++;}
      }
      if (cnt==m) {break;}
    }
    if (tt&&cnt!=m&&cnt3>0) cout<<0;
    if (!tt) cout<<0;
  }
};
int main()
{
  freopen("1.in","r",stdin);
  freopen("2.out","w",stdout);
  ios::sync_with_stdio(false);
  cin>>n>>m;
  
  rep(i,1,n) cin>>c[i];
  if (n<=500&&m<=500)
  {
  rep(i,1,n)
    rep(j,0,m)
    {
      if (c[i]=='+')
      {
        if (j&&pd1(f[i-1][j-1],j-1)) f[i][j][j]=1;
        if (!pd1(f[i-1][j],j))
          maxa(f[i][j],plu(f[i-1][j]));
      } else
      {
        if (j) f[i][j]=f[i-1][j-1]<<1;
      }
      maxa(f[i][j],f[i-1][j]);
    }
  int pos=1;
  dep(i,500,1) maxa(ans,f[n][i]);
  dep(i,500,1) if (ans[i]) { pos=i; break;}
  dep(i,pos,1) cout<<ans[i];
  } else
  {
    subtask4::solve(); 
  }
  return 0; 
}
View Code

然后正解其实就是先做一个转化

把*后面相邻的+变成乘前面的+

于是这样就变成subtask4

转载于:https://www.cnblogs.com/yinwuxiao/p/10327169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值