codeforce 577 B. Modulo Sum

原创 2015年11月19日 18:09:04

当 n 大于 m 时,n 个数的和的种类至少有 n 种,根据鸽巢原理,n 种和 放到 m 个盒子里,必然有至少两个相同的和放到同一个盒子中。设得到这两种和的序列 为 a1,a2,……,al, 和 b1,b2,……,br,那么 bl+1,……,br 这段序列的总和必然为0 ,则结果必然存在

d当 n 小于等于 m 时, 用动态规划,相当于0/1 背包问题,对于每一个 a[i] 有要或者不要两种选择,设 dp[i][j]表示前 i 个数的和模 m 为 j ,那么对于每一个 a[i],如果不加入序列,则 前 i 个数序列的和 跟前 i-1 个数序列的和一样,则 dp[i][j] = dp[i-1][j],如果第 i 个数 a[i]要,则 dp[i][(j+a[i])%m] = 1.

初始化,dp[i][a[i]%m] = 1 ,相当于前 i 个数的序列都只取 当前的第 i 个数

代码如下

#include <iostream>
using namespace std;
int dp[2000][1000],a[1000000];
int main() 
{
	int n,m,i,j;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;++i)
		scanf("%d",&a[i]);
	if(n>m)
	{
		cout<<"YES";
		return 0;
	}
	dp[0][a[0]%m] = 1;
	for(i=1;i<n;++i)
	{
		dp[i][a[i]%m] = 1;
		for(j=0;j<m;++j)
		{
			if(dp[i-1][j])
			{
				dp[i][(j+a[i])%m] = 1;
				dp[i][j] = dp[i-1][j];
			}
		}
	}
	for(i=0;i<n;++i)
	{
		if(dp[i][0]==1)
		{
			cout<<"YES";
			return 0;
		}
	}
	cout<<"NO";
	return 0;
}


版权声明:本文为博主原创文章,欢迎大家转载,我们都是相互学习,共同进步。

相关文章推荐

Codeforces 577 B Modulo Sum 简单数学+dp

http://codeforces.com/problemset/problem/577/B 题目大意:给定两个数n和m,还有a1-an的n个数,判断是否存在该数列的一个子序列,使得子序列元...

dp+抽屉原理 codeforces577b--Modulo Sum、swjtuoj2383--Music Problem

思路与代码均为借鉴:http://www.cnblogs.com/qzqzgfy/p/5621693.html! 题目链接:http://codeforces.com/problemset/probl...

[CodeForces 577B]Modulo Sum[实现][数学]

题目链接:[CodeForces 577B]Modulo Sum[实现][数学] 题意分析: 给出n个数,再给出一个数m。问给出的n个数中,任意组合,是否存在组合出来和能被m整除。 解题思路: ...

CF #319 B Modulo Sum

这是一道不错的dp题。 我们用dp[i][j]来代表前j个数能够达到的对m取余的余数,而我们发现j只与j-1有关,可以用滚动数组。那么我们只需要用类似背包的dp来计算出所有可能的结果即可。#incl...
  • leohujx
  • leohujx
  • 2015年09月13日 22:55
  • 216

Codeforces #319(Div.2) B. Modulo Sum (动态规划)

题意:两个数n和m,还有a1-an的n个数,判断是否存在该数列的一个子序列,使得子序列元素的和可以被m整除。 看了下官方题解: 分两种情况:n>m 和 nm, 可以判断输出一定为“Yes”。求出前 i...

Codeforces - 577B dp

B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes inp...

codeforce 315B Sereja and Array 【水题,封顶距离统计 OR 线段树延迟更新】

Sereja and Array time limit per test 1 second memory limit per test 256 megabytes i...

codeforce 697B Barnicle

题目大意:输入一个科学计数法表示的数字,这个数字没有前导0,形如:a.deb  (0 ≤ a ≤ 9, 0 ≤ d 100, 0 ≤ b ≤ 100)。要求输出正常的表示方法,格式要求如果是整数则不能...

CodeForce 837 A/B/C解题报告

A Text Volume题面:You are given a text of single-space separated words, consisting of small and capita...
  • SCaryon
  • SCaryon
  • 2017年08月04日 21:25
  • 303

6.29 CodeForce 818 A/B解题报告

A.Diplomas and Certificates题面:There are n students who have taken part in an olympiad. Now it’s time...
  • SCaryon
  • SCaryon
  • 2017年06月30日 11:12
  • 217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforce 577 B. Modulo Sum
举报原因:
原因补充:

(最多只允许输入30个字)