首页 > 代码库 > uva 10036 Problem C: Divisibility
uva 10036 Problem C: Divisibility
题意:能否在一个整数序列的每相邻的两项之间添加一个加减号,使得最终结果能被一个给定整数K<=100整除。
dp[i][j]表示第i个数取余k为j的布尔值。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 20000 5 using namespace std; 6 7 int t; 8 int n,k; 9 int a[maxn];10 bool flag;11 bool dp[maxn][110];12 13 int main()14 {15 scanf("%d",&t);16 while(t--)17 {18 memset(dp,false,sizeof(dp));19 scanf("%d%d",&n,&k);20 for(int i=0; i<n; i++)21 {22 scanf("%d",&a[i]);23 }24 dp[0][abs(a[0])%k]=true;25 for(int i=1; i<n; i++)26 {27 for(int j=0; j<k; j++)28 {29 if(dp[i-1][j])30 {31 dp[i][(j+k+abs(a[i]))%k]=true;32 dp[i][((j+k-abs(a[i]))%k+k)%k]=true;33 }34 }35 }36 if(dp[n-1][0]) printf("Divisible\n");37 else printf("Not divisible\n");38 }39 return 0;40 }
uva 10036 Problem C: Divisibility
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。