Archie
记忆化搜索就好

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int m;
int x;
int a[10005];
int n,k;
int f[10005][105];
bool dfs(int no,int re){
	if(f[no][re]!=-1){
		return f[no][re];
	}
	if(no==n+1){
		return re==0;
	}
	return f[no][re]=(dfs(no+1,(re+a[no])%k)|dfs(no+1,(re-a[no]+k)%k));
}
int main(){
	scanf("%d",&m);
	while(m--){
		scanf("%d%d",&n,&k);
		memset(f,-1,sizeof(f));
		for(int i=1;i<=n;++i){
			scanf("%d",&x);
			a[i]=(x%k+k)%k;
		}
		if(dfs(1,0)){
			printf("Divisible\n");
		}else{
			printf("Not divisible\n");
		}
	}
	return 0;
}

相关文章:

  • 2021-06-25
  • 2022-12-23
  • 2021-09-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2022-03-03
猜你喜欢
  • 2021-11-18
  • 2021-08-24
  • 2021-07-16
  • 2022-12-23
  • 2021-09-17
  • 2022-12-23
  • 2021-11-25
相关资源
相似解决方案