您的位置:首页 > 其它

poj1745

2015-09-11 21:18 351 查看
链接:点击打开链接

题意:给出N个数,这N个数中每个数必须用1次,做加减运算,求最后结果是否能整除K

代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <stdlib.h>
using namespace std;
int dp[10005][105],s[10005];                //dp[i][j]代表前i个数做运算后余数是否等于j
int main(){
int n,k,i,j;
while(scanf("%d%d",&n,&k)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&s[i]);
s[i]=abs(s[i])%k;
}
memset(dp,0,sizeof(dp));
dp[0][s[0]]=1;
for(i=1;i<n;i++)
for(j=k-1;j>=0;j--){
if(dp[i-1][j]){
dp[i][(j+s[i])%k]=1;
dp[i][((j-s[i])%k+k)%k]=1;  //加上k防止产生负值
}
}
//        for(i=0;i<n;i++){
//            for(j=0;j<k;j++)
//            cout<<dp[i][j]<<" ";
//            cout<<endl;
//        }
if(dp[n-1][0])
printf("Divisible\n");
else
printf("Not divisible\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: