POJ 1745 Divisibility
题意: 在 n 个整数之间添加 n-1 个+ 或 - 问 运算之后能否被 k 整除。
分析: 状态转移方程 dp[i][j]=dp[i-1][j-a[i]]||dp[i-1][j+a[i]]
#include<stdio.h> #include<string.h> int d[10001][105]; int a[10001]; int main() { int i,j,ps,ms,n,k; while(scanf("%d%d",&n,&k)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); ps=(100000*k+a[1])%k; d[1][ps]=1; for(i=2;i<=n;i++) for(j=0;j<k;j++) { ps=(100000*k+j+a[i])%k; ms=(100000*k+j-a[i])%k; d[i][j]=d[i-1][ps]||d[i-1][ms]; } printf("%s\n",d[n][0]?"Divisible":"Not divisible"); } return 0; }