POJ 1745 Divisibility DP
POJ:http://poj.org/problem?id=1745
A完这题去买福鼎肉片,和舍友去买滴~舍友感慨“这一天可以卖好几百份,每份就算赚一块钱。。那么一个月。。一年。。。”
我说“那我们以后去卖这个吧,饿了还能自己煮着吃”
哈哈,一群天真的少年呀~~~~
说正事~
------------------------------------------------华丽的分割线-------------------------------------------------
题目大意:
给一串数列,在其中间插入+或者-可以得到不同的结果,你需要判断的是对于n个这样的数经过一系列运算后最终是否能得到k。(每个数都要用,按题目给的顺序)
思路:
DP,本题的精华在于用位向量来表示是否出现过mod k的余数,最后判断0那个位置是否出现即可。
还可以直接用两个一维数组来优化空间复杂度,不过时间略长一些。(世界是公平的,有舍才有得)
1.未优化空间复杂度 141ms
#include<cstdio>
#include<cstring>
const int MAXN=10000+10;
bool dp[MAXN][110];
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
int temp;
scanf("%d",&temp);
memset(dp,0,sizeof(dp));
dp[0][( temp +k*10000) %k]=1; for(int i=1;i<n;i++)
{
scanf("%d",&temp);
for(int j=0;j<k;j++)
{
if(!dp[i-1][j])
continue; dp[ i ][ (j + temp +k*10000) %k ]=1;
dp[ i ][ (j - temp +k*10000) %k ]=1;
}
} if(dp[n-1][0])
printf("Divisible\n");
else
printf("Not divisible\n");
}
}
2.优化了的版本 157MS
#include<cstdio>
#include<cstring>
bool dp[101];
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
int value;
scanf("%d",&value);
memset(dp,0,sizeof(dp));
dp[( value +k*10000) %k]=1; for(int i=1;i<n;i++)
{
bool temp[101]={0};
scanf("%d",&value);
for(int j=0;j<k;j++)
{
if(!dp[j])
continue; temp[ (j + value +k*10000) %k ]=1;
temp[ (j - value +k*10000) %k ]=1;
}
memcpy(dp,temp,sizeof(temp));
} if(dp[0])
printf("Divisible\n");
else
printf("Not divisible\n");
}
}
POJ 1745 Divisibility DP的更多相关文章
- POJ 1745 Divisibility (线性dp)
Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10598 Accepted: 3787 Des ...
- POJ 1745 Divisibility【DP】
题意:给出n,k,n个数,在这n个数之间任意放置+,-号,称得到的等式的值能够整除k则为可划分的,否则为不可划分的. 自己想的是枚举,将所有得到的等式的和算出来,再判断它是否能够整除k,可是有1000 ...
- POJ 1745 Divisibility
Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9476 Accepted: 3300 Desc ...
- POJ 1745 【0/1 背包】
题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- POJ 1745 线性和差取余判断
POJ 1745 线性和差取余判断 题目大意:每个数都必须取到,相加或相减去,问所有的方案最后的得数中有没有一个方案可以整除k 这个题目的难点在于dp数组的安排上面 其实也就是手动模仿了一下 比如 一 ...
- [POJ 1745] Divisbility
[题目链接] http://poj.org/problem?id=1745 [算法] DP [代码] #include <algorithm> #include <bitset> ...
- Fire (poj 2152 树形dp)
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...
- POJ 1745:Divisibility 枚举某一状态的DP
Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11001 Accepted: 3933 Des ...
- poj上的dp专题
更新中... http://poj.org/problem?id=1037 dp[i][j][0]表示序列长度为i,以j开始并且前两位下降的合法序列数目; dp[i][j][1]表示序列长度为i, 以 ...
随机推荐
- Repeater控件的
http://blog.csdn.net/zhang_xinxiu/article/details/21872433 想起来,公司的aspx页面前台数据展示除了datagrid以为还有Repeater ...
- 解决配置Ubuntu中vnc远程显示灰屏
解决配置Ubuntu中vnc远程显示灰屏a. 缺失图形化工具b. ~/.vnc/xstartup 权限不对1. Ubuntu 16.04 安装 VNC 及 Mate 桌面环境https://www. ...
- Spring中事务的XML方式[声明方式]
事务管理: 管理事务,管理数据,数据完整性和一致性 事务[业务逻辑] : 由一系列的动作[查询书价格,更新库存,更新余额],组成一个单元[买书业务], 当我们动作当中有一个错了,全错~ ACID 原子 ...
- 升级你的Linux日志系统
650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" ...
- POJ 1113 Wall 求凸包
http://poj.org/problem?id=1113 不多说...凸包网上解法很多,这个是用graham的极角排序,也就是算导上的那个解法 其实其他方法随便乱搞都行...我只是测一下模板... ...
- django 简单会议室预约(6)
后台完了现在来看前端,前端用了一个bootstrap框架,看起来能好看点 先看一下文件结构:在djapp里创建了两个文件夹templates和static templates里面是要显示的页面,sta ...
- 常用处理字符串的SQL函数
汇总函数:Count.Sum.AVG.MAX.min; 数学函数: ABS:绝对值.floor:给出比给定值小的最大整数. round(m,n):m为给定的值,n为小数点后保留的位数. power(m ...
- 洛谷——P3817 小A的糖果
https://www.luogu.org/problem/show?pid=3817 题目描述 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任 ...
- M1卡操作
M1卡操作时,读取的时候,是将卡里面的1块(占16个字节)数据以十六进制字符的形式读取出来的啊!一个字节占两位16进制,因为读出来是字符.如果放在byte[]数组里,因为一个字符占一个字节,所以要用长 ...
- java方法调用之动态调用多态(重写override)的实现原理——方法表(三)
上两篇篇博文讨论了java的重载(overload)与重写(override).静态分派与动态分派.这篇博文讨论下动态分派的实现方法,即多态override的实现原理. java方法调用之重载.重写的 ...