题意:给你n种物品,每种无限个,问恰好取k个物品能组成哪些重量.n<=1000,k<=1000,每种物品的重量<=1000.

我们搞出选取一种物品时的生成函数,那么只要对这个生成函数求k次幂就可以了.结果会很大所以我们可以在模意义下NTT来搞.然而会有一个问题,就是算出来的系数可能恰好是模数的倍数,比如说我们只用998244353就会WrongAnswer on test 20.然后我试了和异化多肽的模数1005060097一块来,然后,WrongAnswer on test 5…Excuse me? 然后看数据,k=1000,物品重量也比较大,分解一下1005060096,发现是2^19*27*71,然后我意识到了:这道题最大需要做最高次数2^20的NTT…然后枚举出了几个2^22*k+1的质数做模数…过了…

以下是枚举出来的一些模数和原根,均为2^22*k+1的形式(不保证k为奇数)

104857601 3

113246209 7

138412033 5

155189249 6

163577857 23

167772161 3

230686721 6

377487361 7

415236097 5

469762049 3

595591169 3

645922817 3

666894337 5

683671553 3

754974721 11

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int mod,rt;
int qpow(int a,int x){int ans=;for(;x;x>>=,a=a*1ll*a%mod)if(x&)ans=ans*1ll*a%mod;return ans;}
void ntt(int *a,int n,int sign){
for(int i=,j=,k;i<n;++i){
k=n;do j^=(k>>=);while(j<k);if(i<j)swap(a[i],a[j]);
}
for(int j=;j<=n;j<<=){
int m=j>>;long long wn=qpow(rt,(mod-+sign*(mod-)/j));;
for(int *p=a;p!=a+n;p+=j){
long long w=;
for(int k=;k<m;++k,w=w*wn%mod){
long long t=w*p[m+k]%mod;p[m+k]=(p[k]-t+mod)%mod;p[k]=(p[k]+t)%mod;
}
}
}
if(sign==-){
long long inv=qpow(n,mod-);for(int i=;i<n;++i)a[i]=a[i]*inv%mod;
}
}
const int maxn=*;
int a[maxn],w[maxn];
int ans[maxn];
int N; int n,k;
void NTT(int MOD,int RT){
mod=MOD;rt=RT;memset(a,,sizeof(a));
for(int i=;i<=n;++i)a[w[i]]=;
ntt(a,N,);
for(int i=;i<N;++i)a[i]=qpow(a[i],k);
ntt(a,N,-);//printf("%d\n",ans[1]);
for(int i=;i<N;++i)if(a[i])ans[i]=;
}
int main(){
scanf("%d%d",&n,&k);
int Max=;
for(int i=;i<=n;++i){scanf("%d",&w[i]);if(w[i]>Max)Max=w[i];}
N=;
while(N<=Max*k)N<<=;
//printf("%d\n",ans[0]);
NTT(,);NTT(,);NTT(,);
for(int i=;i<N;++i)if(ans[i])printf("%d ",i);
return ;
}

CodeForces 632E Thief in a Shop的更多相关文章

  1. codeforces 632E. Thief in a Shop fft

    题目链接 E. Thief in a Shop time limit per test 5 seconds memory limit per test 512 megabytes input stan ...

  2. CodeForces - 632E Thief in a Shop 完全背包

    632E:http://codeforces.com/problemset/problem/632/E 参考:https://blog.csdn.net/qq_21057881/article/det ...

  3. 2019.01.26 codeforces 632E. Thief in a Shop(生成函数)

    传送门 题意简述:给nnn个物件,物件iii有一个权值aia_iai​,可以选任意多个.现在要求选出kkk个物件出来(允许重复)问最后得到的权值和的种类数. n,k,ai≤1000n,k,a_i\le ...

  4. CodeForces - 632E Thief in a Shop (FFT+记忆化搜索)

    题意:有N种物品,每种物品有价值\(a_i\),每种物品可选任意多个,求拿k件物品,可能损失的价值分别为多少. 分析:相当于求\((a_1+a_2+...+a_n)^k\)中,有哪些项的系数不为0.做 ...

  5. Educational Codeforces Round 9 E. Thief in a Shop dp fft

    E. Thief in a Shop 题目连接: http://www.codeforces.com/contest/632/problem/E Description A thief made hi ...

  6. codeforces 632+ E. Thief in a Shop

    E. Thief in a Shop time limit per test 5 seconds memory limit per test 512 megabytes input standard ...

  7. codeforces Educational Codeforces Round 9 E - Thief in a Shop

    E - Thief in a Shop 题目大意:给你n ( n <= 1000)个物品每个物品的价值为ai (ai <= 1000),你只能恰好取k个物品,问你能组成哪些价值. 思路:我 ...

  8. Educational Codeforces Round 9 E. Thief in a Shop NTT

    E. Thief in a Shop   A thief made his way to a shop. As usual he has his lucky knapsack with him. Th ...

  9. C - Thief in a Shop - dp完全背包-FFT生成函数

    C - Thief in a Shop 思路 :严格的控制好k的这个数量,这就是个裸完全背包问题.(复杂度最极端会到1e9) 他们随意原来随意组合的方案,与他们都减去 最小的 一个 a[ i ] 组合 ...

随机推荐

  1. PHP.50-TP框架商城应用实例-前台2-商品推荐

    商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到  注意:在增加datetime类型字段时,要添加默认值{datet ...

  2. Drupal中自定义登录页面

    通过覆写template定义新的user_login表单来为自定义登录页面.方法: 1.  本站使用的主题是Rorty.来到\sites\all\themes\rorty,打开template.php ...

  3. Unity初探之黑暗之光(1)

    Unity初探之黑暗之光(1) 1.镜头拉近 public float speed=10f;//镜头的移动速度 ;//镜头的结束位置 // Update is called once per fram ...

  4. 【icon】 图标组件说明

    小程序默认了几种类型图标,其组件原型如下: <icon type="[success | success_no_circle | info | warn | waiting | can ...

  5. python 读取 log日志的编码问题

    1.我要读取log日志的”执行成功”的个数,log日志编码格式为GBK 2.显示报错,大致意思是说utf-8的代码不能解析log日志 3.后来想想把log日志用GBK编码读出来,写到新文件中,用utf ...

  6. SpringBoot在IntelliJ IDEA下for MAC 热加载

    说在前面 热加载:文件内容变更服务器自动运行最新代码.实则在IDEA环境进行热部署后,下述过程一气呵成. 1代码变更,文件自动保存(IDEA自动保存代码,用户无需使用COMMAND+SAVE快捷键): ...

  7. zookeeper:一.zookeeper集群安装

    1.zookeeper简介2.安装zookeeper2.1 安装环境准备2.2 安装zookeeper2.2.1.解压zookeeper压缩包到/opt/zookeeper2.2.2.编辑zookee ...

  8. [C++] String Basic

    Namespace Declarations A using declaration let us use a name from a namespace without qualify the na ...

  9. selenium识别登录验证码---基于python实现

    本文主要是通过PIL+pytesseract+Tesseract-OCR实现验证码的识别 其中PIL为Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PI ...

  10. activiti工作流已办和待办查询sql

    最近项目中遇到一个问题,需要activiti的工作流表和业务表关联分页查询,然而我对于工作流的查询并不太熟悉,所以学习并总结如下. 想看看activiti到底怎么查询的待认领和待办.已办的查询sql, ...