01背包__DP(POJ1745)

来源:互联网 发布:金10数据网 编辑:程序博客网 时间:2024/06/08 19:28

   题意:n个整数中间填上+或者-,运算结果能否被k整除。1<=n<=10000, 2<=k<=100

 代码:

#include<iostream>#include<cstdio>#include<cstring>#define N 10005bool dp[N][100];int a[N];int main(){    int n,k,i,j;    memset(dp,false,sizeof(dp));    dp[0][0]=true;    scanf("%d%d",&n,&k);    for(i=1;i<=n;i++)    {        scanf("%d",&a[i]);    }    for(i=1;i<=n;i++)    {        for(j=0;j<k;j++)        {            if(dp[i-1][j])            {                dp[i][(j+a[i]%k+k)%k]=true;                dp[i][(j-a[i]%k+k)%k]=true;            }        }    }    if(dp[n][0])        printf("Divisible\n");    else        printf("Not divisible\n");    return 0;}




0 0
原创粉丝点击