poj1745

动态规划,可以把序列计算的所有过程中的得到的结果都%k,这样就可以大大缩小了空间与时间。

View Code
#include <iostream>
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
using namespace std;

bool f[2][205];

int main()
{
//freopen("t.txt", "r", stdin);
int n, k;
scanf(
"%d%d", &n, &k);
memset(f,
0, sizeof(f));
f[
0][100] = true;
for (int i = 1; i <= n; i++)
{
int a;
scanf(
"%d", &a);
for (int j = 0; j <= 200; j++)
f[i
& 1][j] = f[(i - 1) & 1][(j - 100 + a) % k + 100] || f[(i - 1) & 1][(j - 100 - a) % k + 100];
}
if (f[n & 1][100])
printf(
"Divisible\n");
else
printf(
"Not divisible\n");
return 0;
}

posted @ 2011-06-14 20:13  金海峰  阅读(143)  评论(0编辑  收藏  举报