题目:http://noi.openjudge.cn/ch0206/3531/
分析:简单DP,全部右移100,注意不要越界.
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int Tmax=205,Tmax2=10005;
int n,k,a;
bool f[Tmax2][Tmax];
int main()
{
int i,j;
scanf("%d%d",&n,&k);
scanf("%d",&a);
a%=k;
f[2][100-a]=f[2][100+a]=true;
for(i=2;i<=n;i++)
{
scanf("%d",&a);
a%=k;
for(j=0;j<=k+100;j++)
{
f[i+1][(j+a-100)%k+100]|=f[i][j];
f[i+1][(j-a-100)%k+100]|=f[i][j];
}
}
if(f[n+1][100]==true) printf("YES\n");
else printf("NO\n");
/*
for(i=1;i<=k+100;i++)
if(f[n+1][i]) printf("%d ",i-100);
*/
return 0;
}