每日一题- 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背包写成完全背包了,记得倒序弄

posted @ 2024-07-15 18:03  Kent530  阅读(18)  评论(0)    收藏  举报