解析
与取模结合的动归,正常做即可
问题
眼瞎!!!
这个序列的每个数都必须用到!!!
if(f[i-1][j]) f[i][j]=1;
上面这行就是不对的!!!
头疼
仔细审题
opj的题你说它水,你倒是切啊
qwq 枯了
代码
(f数组可以用滚动数组优化一下空间复杂度,但就本题数据范围来说不用了)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=105;
int n;
int f[11000][N];
int k;
int main(){int a;scanf("%d%d",&n,&k);scanf("%d",&a);f[1][a%k]=1;f[1][(-a%k+k)%k]=1;for(int i=2;i<=n;i++){scanf("%d",&a);
// printf("a=%d:\n",a);for(int j=0;j<k;j++){if(f[i-1][j]){//f[i][j]=1;f[i][(j+a)%k]=1;f[i][((j-a)%k+k)%k]=1;}
// printf(" j=%d jia=%d jian=%d jd=%d\n",j,jia(j,a),jian(j,a),f[i][j]);}}if(f[n][0]) printf("YES\n");else printf("NO\n");return 0;
}
/*
2 3
3 1
*/