DP PKU 1754
2014-09-12 19:07
411 查看
开个二维数组。第一维保存几个数。第二维保存的是余数,若dp【】【】=1,就代表存在
负数取模的时候要注意。
代码虐我千百遍,我待代码如初恋
Divisibility
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 10355 | Accepted: 3685 |
Consider an arbitrary sequence of integers. One can place + or - operators between integers in the sequence, thus deriving different arithmetical expressions that evaluate to different values. Let us, for example, take
the sequence: 17, 5, -21, 15. There are eight possible expressions: 17 + 5 + -21 + 15 = 16
17 + 5 + -21 - 15 = -14
17 + 5 - -21 + 15 = 58
17 + 5 - -21 - 15 = 28
17 - 5 + -21 + 15 = 6
17 - 5 + -21 - 15 = -24
17 - 5 - -21 + 15 = 48
17 - 5 - -21 - 15 = 18
We call the sequence of integers divisible by K if + or - operators can be placed between integers in the sequence in such way that resulting value is divisible by K. In the above example, the sequence is divisible by 7 (17+5+-21-15=-14) but is not divisible
by 5.
You are to write a program that will determine divisibility of sequence of integers.
Input
The first line of the input file contains two integers, N and K (1 <= N <= 10000, 2 <= K <= 100) separated by a space.
The second line contains a sequence of N integers separated by spaces. Each integer is not greater than 10000 by it's absolute value.
Output
Write to the output file the word "Divisible" if given sequence of integers is divisible by K or "Not divisible" if it's not.
Sample Input
4 7 17 5 -21 15
Sample Output
Divisible
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <ctype.h> #include <limits.h> #include <string.h> #include <string> #include <math.h> #include <algorithm> #include <iostream> #include <queue> #include <stack> #include <deque> #include <vector> #include <set> #include <map> using namespace std; int dp[10010][110];//前面的代表有几个数,后面的代表前几个数取余之后的结果 int num[10010]; int main(){ int n,k; int i,j; while(~scanf("%d%d",&n,&k)){ memset(dp,0,sizeof(dp)); memset(num,0,sizeof(num)); for(i=1;i<=n;i++){ scanf("%d",&num[i]); } dp[0][0] = 1; for(i=1;i<=n;i++){ for(j=0;j<=k-1;j++){ if(dp[i-1][j] == 1){ int t = ((j+num[i])%k+k)%k; dp[i][t] = 1; int t1 = ((j-num[i])%k+k)%k; dp[i][t1] = 1; } } } if(dp [0] == 1){ printf("Divisible\n"); } else{ printf("Not divisible\n"); } } return 0; }
相关文章推荐
- pku 1088 (DP)
- pku 1952 BUY LOW, BUY LOWER(DP)
- pku1038状态压缩dp
- pku 1015 Jury Compromise DP
- pku1795 DNA Laboratory 状压DP
- 动态规划(DP)——HDU1081、PKU1050 To The Max 最大子矩阵问题
- PKU 1458 Common Subsequence(最长公共子序列,dp,简单)
- pku 1037 A decorative fence(DP,划分)
- pku 3267 The Cow Lexicon(很经典的字符串DP)
- pku 1050 (DP)
- pku 1699 Best Sequence 状态压缩dp
- PKU 2411 Mondriaan's Dream 状态DP
- pku 3017 单调队列优化DP
- pku--1163 the trianger(dp)
- DP——斜率优化专题(pku3709,hdu3669)
- BZOJ 1417: Pku3156 Interconnect (期望DP)
- PKU 1821 Fence(原来DP也是会超时的。。)
- 四边形不等式优化dp应用------pku 1160 post office 解题报告
- pku 2392 space elevator 多重背包 dp 解题报告
- PKU 3311 Hie with the Pie 状态DP