uva 10036

10036 - Divisibility

额..直接复制不过来,只好叙述一下了...
t组样例,n个数(1~10000),k(2~100)是要取余的数,然后给出n个数
第一个数前不能加正负号,其他的数前面可以加正负号,然后问这些正负号任意加,所有的情况中是否有能对k取余得0的情况。
若有输出:Di...否则Not...

 

感觉好水的dp,可是就是学不会呀。。。。

好烦恼.

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <climits>
 8 #include <queue>
 9 #define ll long long
10 #define INF  0x3f3f3f3f
11 
12 using namespace std;
13 int dp[100100][105];
14 int main()
15 {
16     int t;
17     cin>>t;
18     while(t--)
19     {
20         int n,k,a;
21         cin>>n>>k>>a;
22         memset(dp,0,sizeof(dp));
23         dp[0][(a%k+k)%k] = 1;//dp[i][j]代表加到第i位余数为j
24         for(int i = 1; i < n; i++)
25         {
26             scanf("%d",&a);
27             a = abs(a)%k;
28             for(int j = 0; j < k; j++)
29             {
30                 if(dp[i-1][j])
31                     dp[i][(j+a)%k] = dp[i][(j - a+k)%k] = 1;
32             }
33         }
34         if(dp[n-1][0] == 1)
35             printf("Divisible\n");
36         else
37             printf("Not divisible\n");
38     }
39     return 0;
40 }

 

转载于:https://www.cnblogs.com/henserlinda/p/4745018.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值