每日一题- CF1992F
随便补补题
#include<bits/stdc++.h>
using namespace std;
int t,n,x,a[100005],res;
map<int,bool> p;
int main(){
scanf("%d",&t);
while(t--){
res=1;
scanf("%d%d",&n,&x);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
p.clear();p[x-1]=1;
for(int i=1;i<=n;i++){
if(x%a[i]!=0)continue;
if(p.count(x-x/a[i])){
res++;p.clear();
p[x-a[i]]=1;p[x-1]=1;
}else{
for(auto u:p){
int j=x-u.first;
if(x%(1LL*j*a[i])==0)p[x-j*a[i]]=1;
}
}
}
printf("%d\n",res);
}
return 0;
}
一开始还把这个01背包写成完全背包了,记得倒序弄
浙公网安备 33010602011771号