【DP】:CF #319 (Div. 2) B. Modulo Sum
【题目链接】:http://codeforces.com/contest/577/problem/B
【相似题目】:http://swjtuoj.cn/problem/2383/
【题意】:给出n个数,问是否能从中选出一些数,使得这些数的和是m的倍数。
【题解】:
首先,先明白这样一个事实:
设:sum%dend=rem;
(sum:一些数的和,dend:被除数,rem:余数)
则有:(rem+n)%dend=(sum+n)%dend;
(n为一个新的数)
知道了上面的等式之后,题目就好做了:
设:est[rem]=1 表示存在余数rem,它是通过一些数的和sum%dend得到的。
对于每一个给定的n,
考察 1<=rem<=dend-1 范围内的est[rem],即考察是否存在之前一些数的和sum%dend=rem(不管sum是之前的数是怎么相加得来的)
若存在,即est[rem]=1,则可以通过(rem+n)%dend来求出新的余数,即令est[(rem+n)%dend]=1;
此外,n%dend也是新的余数,即est[n%dend]=1;
若在上面的余数中有一个等于0,即est[0]=1,则说明存在dend的倍数,直接中断循环。
【注意】
在对每一个n的循环中,不能立刻更新est数组,原因是某些情况会导致出错。
出错例子:
设:已有est[1]=1,此时n=1,dend=100;
若令est[(1+n)%dend]=1,即est[2]=1,
则又有est[(2+n)%dend]=1,即est[3]=1,
又有est[(3+n)%dend]=1,即est[4]=1......
最后整个est数组都为1,显然这是错误的。
所以,要一个 i_est 数组来临时更新est数组,最后再更新est数组(详见代码)。
#include<stdio.h>
int num,dend,t,i,n[];
char est[],i_est[];
int main(){
scanf("%d%d",&num,&dend);
for(t=;t<num;t++){
scanf("%d",&n[t]);
}
for(t=;t<num;t++){
for(i=;i<dend;i++){
if(!est[i]) continue;
i_est[(i+n[t])%dend]=;
}
i_est[n[t]%dend]=;
for(i=;i<dend;i++){
est[i]=i_est[i];
}
if(est[]) break;
}
if(est[]){
printf("YES\n");
}
else{
printf("NO\n");
}
return ;
}
【DP】:CF #319 (Div. 2) B. Modulo Sum的更多相关文章
- Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp
B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...
- Codeforces Round #319 (Div. 2)B. Modulo Sum DP
B. Modulo Sum ...
- Codeforces Round #319 (Div. 2) B. Modulo Sum 抽屉原理+01背包
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Codeforces Round #319 (Div. 2) B Modulo Sum (dp,鸽巢)
直接O(n*m)的dp也可以直接跑过. 因为上最多跑到m就终止了,因为前缀sum[i]取余数,i = 0,1,2,3...,m,有m+1个余数,m的余数只有m种必然有两个相同. #include< ...
- LeetCode:零钱兑换【322】【DP】
LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...
- LeetCode:完全平方数【279】【DP】
LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...
- 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】
https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...
- hdoj-1421-搬寝室【DP】
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- Python开发【前端】:jQuery
jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是&qu ...
随机推荐
- HDU 5690——All X——————【快速幂 | 循环节】
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- 比较2个文件内容不同行的shell脚本
第一种:grep命令法 命令如下:grep -vxFf file1 file2 > a.txt 其中file2是大文件,file1是小文件 第一种:comm命令法 命令如下:comm file ...
- Timer 控件
1. 设置属性 Enable = true 或调用 start方法后, *_Tick 方法不会立即执行,会先等待一个时间间隔 2.timer1不管你上次的事情是否做完,它都会每个一个时间间隔做它应该 ...
- fabu dao fenleizhong
IsAggregated IsAggregatedIsAggregated IsAggregatedIsAggregated IsAggregatedIsAggregated IsAggregated ...
- CSS代码优化(转载)
要点1:css代码优化作用与意义 1.减少占用网页字节.在同等条件下缩短浏览器下载css代码时间,相当于加快网页打开速度:2.便于维护.简化和标准化css代码让css代码减少,便于日后维护:3.让自己 ...
- ubuntu下部署django
一:保证python运行环境安装 apt-get install python 如果需要进行开发则还要安装python-dev apt-get install python-dev 二:安装djang ...
- Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))
在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...
- 00HTML
一.概述 超文本标记语言(Hyper Text Markup Language),HTML是一门描述性的语言.基本语法: <标签> 内容 </标签>** 在一个网页中,HTML ...
- CentOS 7运维管理笔记(7)----Apache 基于端口的虚拟主机配置
如果一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配置. (1) 在虚拟机的CentOS7服务器上配置 eth0:4 为192.168.1.214: (2) ...
- Python爬虫教程-22-lxml-etree和xpath配合使用
Python爬虫教程-22-lxml-etree和xpath配合使用 lxml:python 的HTML/XML的解析器 官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 ...