[DP][数学]JZOJ 3318 Brunhilda的生日
Posted mastervan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[DP][数学]JZOJ 3318 Brunhilda的生日相关的知识,希望对你有一定的参考价值。
分析
不难发现,当一个数在[x,x+prime[i])(x|prime[i])中时,它可以由x转移过来
那我们考虑贪心,对于这个x|prime[i],我们记录最大的可被x整除的prime,然后用两个端点跳来跳去,因为越前面转移过来的越优

#include <iostream> #include <cstdio> using namespace std; typedef long long ll; const int N=1e7+100; int m,q; int p[N/100],mx[N],f[N]; void Prime() for (int i=1;i<=m;i++) for (int j=1;j<=(N-100)/p[i];j++) mx[j*p[i]]=p[i]; int main() scanf("%d%d",&m,&q); for (int i=1;i<=m;i++) scanf("%d",&p[i]); Prime();mx[0]=p[m]; for (int l=0,r=1;l<r&&r<=N-100;l++) if (!mx[l]) continue; for (;r<=min(l+mx[l]-1,N-100);) f[r++]=f[l]+1; for (;q;q--) int qq; scanf("%d",&qq); printf((f[qq]?"%d\n":"oo\n"),f[qq]);
以上是关于[DP][数学]JZOJ 3318 Brunhilda的生日的主要内容,如果未能解决你的问题,请参考以下文章