poj 1745 dp

来源:互联网 发布:2010江苏高考数学知乎 编辑:程序博客网 时间:2024/06/15 19:49

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

(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;}