educational codeforces 难度,codeforces round 712
教育密码部队第九轮e。商店里的小偷_博客_教育合力难度
【题目链接】点击打开链接
【题意】给定不,不,不种物品每种的价值为Ai,必须装满K个物品的背包,求所有能装的价值,从小到大输出。
【解题方法】其实就是长度为1000的价值向量的k次幂,存在该价值就为1,否则为0。然后用快速傅里叶转换(同快速傅立叶变换)求K维卷积,用弯曲件数组可以降低精度误差,同时长度不要直接设为1e6。
【复杂度分析】O(W*logW*logK)
【交流代码】
//
//由BLUEBUFF 2016年1月10日创建
//版权所有(c) 2016年BLUEBUFF .版权所有
//
#杂注注释(链接器,/STACK:102400000,102400000 )
#包含ext/Pb _ ds/assoc _容器. hpp
#包含ext/pb_ds/tree_policy.hpp
#包含ext/pb_ds/hash_policy.hpp
#包含集
#包含地图
#包括队列
#包括堆栈
#包含数学函数
#包括cstdio
#包含时间。h
#包含标准库函数
#包括字符串
#包含复杂
# include sstream//是字符串流
#包括输入输出流
#包含算法
使用命名空间标准
//使用命名空间_ _ gnu _ pbds
typedef long long LL
数据类型说明对int,LL pp
#定义REP1(i,a,b)for(int I=a;我我)
#定义REP2(i,a,b)for(int I=a;我我)
#定义REP3(i,a,b)for(int I=a;我我-)
#定义CLR(a,b) memset(a,b,sizeof(a))
#定义MP(x,y) make_pair(x,y)
模板类T1,类T2内联void getmax(T1 a,T2 b){ if(b a)a=b;}
模板类T1,类T2内联void getmin(T1 a,T2 b){ if(b a)a=b;}
const int maxn=(1 ^ 21)10;
const int maxm=100010
const int maxs=10
const int maxp=1e3 10
const int INF=1e9
const int UNF=-1e 9;
const int mod=1e 9 7;
const double PI=acos(-1);
//头
数据类型说明复杂双复杂;
void rader(Complex *y,int len) {
for(int i=1,j=len/2;I len-1;i ) {
if(i j) swap(y[i],y[j]);
int k=len/2;
while(j=k){ j-=k;k/=2;}
if(j k)j=k;
}
}
无效fft(复数*y,整数长度,整数运算){
rader(y,len);
for(int h=2;h=lenh=1) {
double ang=op * 2 * PI/h;
复数wn(cos(ang),sin(ang));
for(int j=0;j lenj=h) {
复数w(1,0);
for(int k=j;k j h/2;k ) {
复数u=y[k];
复数t=w * y[k h/2];
y[k]=u t;
y[k h/2]=u-t;
w=w * wn
}
}
}
if(op==-1)for(int I=0;我lenI)y[I]/=len;
}
int n,m,k;
复数x1[maxn],x2[maxn];
bool p[maxn],q[maxn];
void multiply(bool *p,int n,bool *q,int m){
int len=1;
而(len=n m)len=1;
for(int I=0;我leni ) x1[i]=复数(i=n?p[i] : 0,0);
for(int I=0;我leni ) x2[i]=复数(i=m?q[i] : 0,0);
fft(x1,len,1);
fft(x2,len,1);
for(int I=0;我lenI)x1[I]=x1[I]* x2[I];
fft(x1,len,-1);
for(int I=0;I=n m;i ) p[i]=x1[i].实()0.5;
n=m;
}
int main()
{
scanf(%d%d ,n,k);
for(int I=1;I=n;i ){
int x;
scanf(%d ,x);
q[x]=1;
}
m=1000
n=0;
p[0]=1;
当(k)
{
如果(国王^ 1)乘以(p,n,q,m);
如果(国王^ 1)乘以(q,m,q,m);
k=1;
}
for(int I=1;I=n;i ) if(p[i]) printf(%d ,I);printf( \ n );
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。