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;
}


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

cf#319-div2-B. Modulo Sum-(dp) 求模

题意要n个数中 看能否选出一个组合,使其之和为 m的倍数 开一个dp[1001]、tmp_dp[1001] dp[i]的意思,是能得到 一个组合,其和为sum 且sum%m==i 那么我们就让dp[...
  • viphong
  • viphong
  • 2015年09月23日 08:16
  • 406

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

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

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

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

codeforces B. Modulo Sum

B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard...
  • ffgcc
  • ffgcc
  • 2018年01月29日 13:41
  • 29

Codeforces 577B Modulo Sum 【多重背包】

题目链接:Codeforces 577B Modulo Sum B. Modulo Sum time limit per test2 seconds memory limit per test2...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2016年04月13日 22:06
  • 424

CF #319 B Modulo Sum

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

CodeForces - 919B Perfect Number (打表)

Perfect Number time limit per test 2 seconds memory limit per test 256 megabytes in...
  • lzc504603913
  • lzc504603913
  • 2018年02月01日 00:11
  • 86

codeforces 126B Password

Description Asterix, Obelix and their temporary buddies Suffix and Prefix has finally found the H...
  • Kimi_R_17
  • Kimi_R_17
  • 2014年07月28日 22:46
  • 618

cf B. Modulo Sum (01背包)

You are given a sequence of numbers a1, a2, ..., an, and a number m. Check if it is possible to...
  • h1021456873
  • h1021456873
  • 2015年09月21日 00:09
  • 418

Codeforces Round #460 (Div. 2)-B. Perfect Number

B. Perfect Numbertime limit per test2 seconds memory limit per test256 megabytesProblem Description...
  • yopilipala
  • yopilipala
  • 2018年02月01日 14:27
  • 212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforce 577 B. Modulo Sum
举报原因:
原因补充:

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