首页 > 其他分享 > AtCoder Beginner Contest 262(D-E)

AtCoder Beginner Contest 262(D-E)

时间:2022-09-07 15:58:45浏览次数:89  
标签:AtCoder const Beginner ll 个数 选择 262 dp 105

D - I Hate Non-integer Number

题意:一个长度为n的数组,选择其中的 x项,问其中有多少种选择,这x项的和可以被选择的数目整除,比如,选择3个数,和为6,那么6/3=2,就可以被整除。

题解: 每个数有选与不选两种可能,dp,观察数据,1<=a[i]<=1e9,所以数组中不能存储总和,会爆,而两项之间其实有关系的是被求余之后的数,所以存储余数即可。

dp[i][j][k]表示的是前i个数中,选择j个,然后余数为k的个数,所以 dp[i][j][(k+a[i])%z]+=dp[i-1][j-1][k];

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll dp[105][105][105];
signed main(){
   ios::sync_with_stdio(false);
   cin.tie(0);cout.tie(0);
  ll n;cin>>n;
  vector<ll> a(n+1,0);
  for(ll i=1;i<=n;i++) cin>>a[i];
  ll ans=0;
  for(ll z=1;z<=n;z++){//对于除不同的数之间,他们可以看成不同的部分,之间并不影响,所以可以分开算
  memset(dp,0,sizeof(dp));
  dp[0][0][0]=1;
  for(ll i=1;i<=n;i++){
    for(ll j=0;j<=z;j++){
      for(ll k=0;k<z;k++){
        dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k])%mod;
        if(j) dp[i][j][(k+a[i])%z]=(dp[i][j][(k+a[i])%z]+dp[i-1][j-1][k])%mod;//这里是对z求余,因为求的是最后z个数的情况
      }
    }
   }
   ans=(ans+dp[n][z][0])%mod;
  }
  cout<<ans;
}
   

标签:AtCoder,const,Beginner,ll,个数,选择,262,dp,105
From: https://www.cnblogs.com/hhzp/p/16665720.html

相关文章

  • AtCoder Regular Contest 147
    ProblemA题目大意:由N个正整数组成的序列,我们可以从中取出任意长短序列进行如下操作:序列中(最大值maxn%最小值minn=A),如果A为0则删除maxn,否则用A替换,询问要使得整个序......
  • AtCoder做题记录
    AtCoder大乱炖AtCoder乱做AtCoder随便草ARC147ARC147C发现这个式子当所有\(x_i\)趋近于某一个值时答案比较优,于是可以发现这是一个近似单谷函数,用二分+随机化/特......
  • 洛谷P1262 间谍网络(tarjan求强连通分量+缩点)
    题目链接:https://www.luogu.com.cn/problem/P1262思路:首先,我们能够知道,入读为0的点如果不能被收买的话,那么此题是无解的。其次,如果图中存在环的话,那么环中每个点的......
  • AtCoder Beginner Contest 265
    E-Warp注意到\(N\)相比\(M\)要小得多。考虑DP,令\(dp_{i,j,k}\)表示一共使用了\(i+j+k\)次操作,且每种操作的使用次数分别为\(i,j,k\)的方案数,然后......
  • AtCoder Beginner Contest 267
    A-Saturday题意:给定今天的日期,问到周六还有几天。分析:暴力判断即可。代码:intmain(){ cin>>s; if(s=="Monday")ans=5; if(s=="Tuesday")ans=4; if(s=="We......
  • AtCoder Beginner Contest 267
    https://atcoder.jp/contests/abc267全部的AC代码:https://atcoder.jp/contests/abc267/submissions/me?f.Task=&f.LanguageName=&f.Status=AC&f.User=HinanawiTenshiE......
  • Atcoder Regular Contest 147
     AtcoderRegularContest147这是本蒟蒻第3次打的\(ARC\),赛时的时候\(B\)题调代码调崩了,\(wa\)了15发。所以来简略的写一下题解A:题目链接题目大意:略题目分析......
  • AtCoder Beginner Contest 267 解题报告
    A-Saturday题意:输入字符串代表周一至周五的某一天,输出这一天离周六还有多少天分析:映射一下,直接输入输出ac代码:#include<iostream>#include<algorithm>#inclu......
  • AtCoder Beginner Contest 267
    E-ErasingVertices2做法1观察可得:对于某个时刻,贪心删当前代价最小的点肯定是最优的。但是删一个点会减少相邻接的点的代价。然后就想到了堆,但是这个堆需要支持decre......
  • AtCoder Beginner Contest 267 E Erasing Vertices 2
    ErasingVertices2二分||贪心二分的做法就二分答案,然后检查一下能否删除,像拓扑一下跑一下就行#include<iostream>#include<cstdio>#include<algorithm>#includ......