POJ 1745 Divisibility (线性dp)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 10598 | Accepted: 3787 |
Description
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 second line contains a sequence of N integers separated by spaces. Each integer is not greater than 10000 by it's absolute value.
Output
Sample Input
4 7
17 5 -21 15
Sample Output
Divisible
Source
field=source&key=Northeastern+Europe+1999">Northeastern Europe 1999
题目链接:
id=1745">http://poj.org/problem?id=1745
题目大意:给n个数,让他们通过加减运算。推断结果可不可能被k整除
题目分析:用dp[i][j]表示通过前i个数的运算得到的余数为j可不可能。先看求a % k。假设a > k,则a = n * k + b。(n * k + b) % k == 0 + b % k = a % k,所以当a > k时,对求余数有影响的部分是不能被整除的部分。因此对于每一个数我们能够做a[i] = a[i] > 0 ? (a[i] % k) : -(a[i] % k)的预处理,然后就是在dp[i - 1][j]的情况下。推出下一状态。下一状态有两种可能,加和减,减的时候防止出现负数加上个k再取余,初始化dp[0][a[0]]
= true最后仅仅要推断dp[n - 1][0]及前n个数通过加减运算是否能得到被k整除的值
#include <cstdio>
#include <cstring>
int const MAX = 10005; bool dp[MAX][105];
int a[MAX]; int main()
{
int n, k;
while(scanf("%d %d", &n, &k) != EOF)
{
memset(dp, false, sizeof(dp));
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
a[i] = a[i] > 0 ? (a[i] % k) : -(a[i] % k);
}
dp[0][a[0]] = true;
for(int i = 1; i < n; i++)
{
for(int j = 0; j <= k; j++)
{
if(dp[i - 1][j])
{
dp[i][(j + a[i]) % k] = true;
dp[i][(k + j - a[i]) % k] = true;
}
}
}
printf("%s\n", dp[n - 1][0] ? "Divisible" : "Not divisible");
}
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
POJ 1745 Divisibility (线性dp)的更多相关文章
- POJ 1745 Divisibility【DP】
题意:给出n,k,n个数,在这n个数之间任意放置+,-号,称得到的等式的值能够整除k则为可划分的,否则为不可划分的. 自己想的是枚举,将所有得到的等式的和算出来,再判断它是否能够整除k,可是有1000 ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
- POJ 1745 Divisibility DP
POJ:http://poj.org/problem?id=1745 A完这题去买福鼎肉片,和舍友去买滴~舍友感慨"这一天可以卖好几百份,每份就算赚一块钱..那么一个月..一年...&quo ...
- poj 3356 AGTC(线性dp)
题目链接:http://poj.org/problem?id=3356 思路分析:题目为经典的编辑距离问题,其实质为动态规划问题: 编辑距离问题定义:给定一个字符串source,可以对其进行复制,替换 ...
- POJ 1745 Divisibility
Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9476 Accepted: 3300 Desc ...
- POJ 1745 线性和差取余判断
POJ 1745 线性和差取余判断 题目大意:每个数都必须取到,相加或相减去,问所有的方案最后的得数中有没有一个方案可以整除k 这个题目的难点在于dp数组的安排上面 其实也就是手动模仿了一下 比如 一 ...
- poj 1050 To the Max(线性dp)
题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...
- POJ 1745 【0/1 背包】
题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
随机推荐
- Datameer for Hadoop Solution
Hadoop promises to become a ubiquitous framework for largescale business intelligence, but right now ...
- hdu3555(数位dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题意:求区间[a,b]内包含有'49'的数的总个数. 分析:dp[pos][0]表示到第pos位 ...
- 用XAML做网页!!—页头
原文:用XAML做网页!!-页头 接续上次进度,我们此次来制作页头. 首先要实现两侧边缘的美化,如下图所示: 在边缘处有一层朦胧的亮度反光效果,这也是通过简单的渐变实现的,而且我们在后面的每个区块中都 ...
- cocos2dx 3.1从零学习(六)——CocosStudio(VS2013project导入及环境设置)
导入libCocosStudio.libExtensions.libGUI 新建的project例如以下图: 加入现有项目 右键解决方式.例如以下操作: watermark/2/text/aHR0cD ...
- Jquery清除:hover事件
$("#hover_div").unbind("mouseenter").unbind("mouseleave"); 可用于div按钮,造成 ...
- 【spring源代码分析】--Bean的解析与注冊
接着上一节继续分析,DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法: protected void parseBeanDefini ...
- cocos2d-x3.0 实现HTTP请求GET、POST
HTTP请求实现 把以下代码拷贝到新创建的project中就能看到效果 HelloWorldScene.h #include "cocos2d.h" /*记得要引头文件*/ #in ...
- [WPF]不规则窗体的实现
Microsoft Expression Design 4 导入做好的login.Png图片 调整美工板大小 导出,右边格式为XAML WPF 资源字典,实时效果为XAML效果 文件名login.xa ...
- Windows Phone开发(33):路径之其它Geometry
原文:Windows Phone开发(33):路径之其它Geometry 上一节中,我们把最复杂的PathGeometry给干了,生剩下几个家伙就好办事了.一起来见见他们的真面目吧. 一.LineGe ...
- python学习之list
list: 创建:list = [5,7,9] 取值和改值:list[1] = list[1] * 5 列表尾插入:list.append(4) 去掉第0个值并返回第0个值的数值:list.pop(0 ...