poj 1745 dp

把取余神马的都提前处理掉,可以加快速度

(bool)dp[i][j]=dp[i-1][j-a[i]]||dp[i-1][j+a[i]]
#include<stdio.h>
#include<string.h>
int a[10001];
bool dp[10001][101];
int n,m;
int main()
{
	int i,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		while(a[i]<0) a[i]+=m;
		a[i]=a[i]%m;
	}
	dp[1][a[1]]=true;
	for(i=2;i<=n;i++)
	{
		for(j=0;j<m;j++)
		{
			int t1=j-a[i];
			while(t1<0) t1+=m;
			int t2=j+a[i];
			dp[i][j]=dp[i-1][t1]||dp[i-1][t2%m];
		}
	}
	if(dp[n][0])
		printf("Divisible\n");
	else printf("Not divisible\n");
	return 0;
}

  

posted @ 2011-11-17 05:22  Because Of You  Views(163)  Comments(0Edit  收藏  举报