LOADING

加载过慢请开启缓存,浏览器默认开启

dp practice_day 1

今天就切了三道水题,别的时间都在写编译器

1.CF 1227C

水题,没啥好说的,每一个区间去求对应的方案数即可

void solve()
{
  int n,k;cin>>n>>k;
  string s;cin>>s;
  ll ans=0;
  unordered_set<char>st;
  for(int i=0;i<k;++i)
  {
    char c;cin>>c;
    st.insert(c);
  }
  int l=0,r=0;
  while(r<n)
  {
    while(r<n&&st.count(s[r]))++r;
    ll len=r-l;
    ans+=(len+1)*len/2;
    ++r;
    l=r;
  }
  cout<<ans<<'\n';
  return;
}
  1. CF 467C

经典的区间dp,转移方程很好想,就是${dp[i][j]=max(dp[i][j],dp[i-m][j-1]+sum[i]-sum[i-])}$

void solve()
{
  int n,m,k;
  cin>>n>>m>>k;
  vector dp(n+1,vector<ll>(k+1));
  vector<ll>sum(n+1);
  for(int i=1;i<=n;++i)
  {
    cin>>sum[i];
    sum[i]+=sum[i-1];
  }
  for(int i=m;i<=n;++i)
  {
    for(int j=1;j<=k;++j)
    {
      dp[i][j]=dp[i-1][j];
      if(j*m>i)break;
      dp[i][j]=max(dp[i][j],dp[i-m][j-1]+sum[i]-sum[i-m]);
    }
  }
  cout<<dp[n][k]<<'\n';
  return;
}
  1. CF 296B

容斥题,我们可以先预处理出对应位置上的3种不同情况和总情况数,即sa[i]==sb[i] sa[i]>=sb[i] sa[i]<=sb[i],根据容斥定理,答案即为:

∏a[i] - ∏b[i] - ∏c[i] + ∏d[i]

至少有一对满足情况=所有情况 - 所有都不满足第一种- 所有都不满足第二种 + 两者交集

void solve()
{
  int n;cin>>n;
  string sa,sb;
  cin>>sa>>sb;
  vector<ll>a(n),b(n),c(n),d(n);//represent 1.the total number of situation 2. sa[i]>=sb[i] 3.sa[i]<=sb[i] 4. sa[i]==sb[i]
  // then the answer is A-B-C+D
  for(int i=0;i<n;++i)
  {
    if(sa[i]=='?'&&sb[i]=='?')
    {
        a[i]=100;
        b[i]=55;
        c[i]=55;
        d[i]=10;
    }
    else if(sa[i]=='?')
    {
        a[i]=10;
        b[i]=10-(sb[i]-'0');
        c[i]=sb[i]-'0'+1;
        d[i]=1;
    }
    else if(sb[i]=='?')
    {
        a[i]=10;
        c[i]=10-(sa[i]-'0');
        b[i]=sa[i]-'0'+1;
        d[i]=1;
    }
    else
    {
        a[i]=1;
        b[i]=(sa[i]>=sb[i]);
        c[i]=(sa[i]<=sb[i]);
        d[i]=(sa[i]==sb[i]);
    }
    if(i>0)
    {
        a[i]=(a[i]*a[i-1])%MOD;
        b[i]=(b[i]*b[i-1])%MOD;
        c[i]=(c[i]*c[i-1])%MOD;
        d[i]=(d[i]*d[i-1])%MOD;
    }
  }
  ll ans=a[n-1]-b[n-1]-c[n-1]+d[n-1];
  if(ans<0)ans+=MOD;
  cout<<ans<<'\n';
  return;
}

明天还得写OS的作业,感觉LSM又要鸽一天了,毕竟🐭🐭我已经准备回家搞二次元了!