20pts 求助背包 dp
查看原帖
20pts 求助背包 dp
761649
ryf_loser楼主2023/11/12 20:56
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
inline int in(){
	int x=0,f=1;char c;
	c=getchar();
	while (c<'0'||c>'9'){
		if (c=='-')f=-1;
		c=getchar();
	}
	while (c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
	return x*f;
}
int q,n,k;
bool dp[10005][105];
int main(){
	q=in();
	while (q--){
		memset(dp,0,sizeof dp);
		n=in(),k=in();
		int x=in();
		dp[1][(x%k+k)%k]=dp[1][((-x)%k+k)%k]=1;
		for (int i=2;i<=n;i++){
			x=in();
			for (int j=0;j<k;j++)if (dp[i-1][j])dp[i][((j+x)%k+k)%k]=dp[i][((j-x)%k+k)%k]=1;
		}
		if (!dp[n][0])printf ("Not divisible");
		else puts("Divisible");
	}
	return 0;
}

算法思路问题不大,但总是 20pts。

2023/11/12 20:56
加载中...