`

poj 1745问题

 
阅读更多

题意:给你n个整数,和一个k值(2<=k<=100),问在这n个数之间的n-1的位置任意放加减号,问有没有一种情况使结果整除k。

思路:  dp[i][j]=dp[i-1][j-a[i]]||dp[i-1][j+a[i]];这里用到了数论里的一点知识,sum(a[i])%k = sum(a[i]%k)%k,假设dp[i][j]为取前i个数求和时余数为j的情况。只要dp[4][0]=1就表示能够整除。

代码如下:

#include <iostream>
using namespace std;
int a[10001];
int dp[10001][101];

int main()
{
	int n,m,s,t,i,j;
	cin>>n>>m;
	for(i=1;i<=n;i++)
		cin>>a[i];
	s=a[1];
	while(s<0)
		s+=m;
	dp[1][s%m]=1;
	for (i=2;i<=n;i++)
	{
		for (j=0;j<m;j++)
		{
			s=j-a[i];
			while(s<0)
				s+=m;
			t=j+a[i];
			while(t<0)
				t+=m;
			dp[i][j]=dp[i-1][s%m]||dp[i-1][t%m];//状态转移方程
		}
	}
	if (dp[n][0])
		cout<<"Divisible"<<endl;
	else
		cout<<"Not Divisible"<<endl;
	return 0;
}






 

分享到:
评论

相关推荐

    POJ 放炮问题 1185

    《POJ放炮问题1185》是一个典型的动态规划问题,主要涉及到计算机科学中的算法设计与分析。问题的核心在于计算在给定的地形条件下,能够放置的最大炮数。题目来源于北京大学的在线编程平台POJ。 该问题的解决策略...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **例题**:poj1860, poj3259, poj1062, poj2253, poj1125, poj2240 - **解释**:最短路径算法包括Dijkstra算法、Bellman-Ford算法、Floyd算法以及堆优化的Dijkstra算法等。 ##### (3) 最小生成树算法 - **例题**...

    POJ1321棋盘问题

    "POJ1321棋盘问题" POJ1321棋盘问题是一种经典的回溯法问题,目的是在一个给定的棋盘形状上摆放k个棋子,使得任意两个棋子不能放在同一行或者同一列。该问题可以通过回溯法来解决。 问题描述: 在一个给定的棋盘...

    poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告

    poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...

    POJ算法题目分类

    * 模拟法:模拟法是指通过模拟问题的过程来解决问题的方法,如 poj1068、poj2632、poj1573、poj2993、poj2996。 二、图算法 图算法是指解决图相关问题的算法,包括图的深度优先遍历和广度优先遍历、最短路径算法...

    POJ.rar_poj java_poj1048

    【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...

    POJ_3131.zip_POJ 八数码_poj

    标题中的“POJ_3131.zip_POJ 八数码_poj”指的是一个与编程竞赛网站POJ(Problem Set Algorithm)相关的项目,具体是针对3131号问题的解决方案,该问题涉及到了八数码游戏。八数码游戏,又称滑动拼图,是一个经典的...

    POJ1837-Balance

    【描述】"解题报告+AC代码"意味着这个压缩包包含了对POJ1837问题的解决方案的详细分析以及通过了所有测试用例的正确代码。解题报告通常会涵盖问题理解、算法思路、时间复杂度分析以及可能的优化策略。AC代码代表...

    POJ2002-Squares

    在"POJ2002-Squares"这个问题中,参赛者可能需要编写一个程序来处理与正方形相关的数学问题。这可能涉及到计算和处理大量正方形,例如找出一个范围内的所有完全平方数,或者计算不同大小正方形覆盖区域的重叠部分。...

    POJ1159-Palindrome

    【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和通过验证的源代码。解题报告通常会包含问题分析、算法设计、代码实现以及可能的优化策略。AC(Accepted)代码意味着提交的代码已经...

    POJ 1045.rar

    标题“POJ 1045.rar”表明这是一个与编程竞赛相关的压缩文件,可能是为了解决POJ(Programming Online Judge)平台上的问题1045。POJ是一个在线的编程练习平台,它提供了各种算法问题供用户解决并提交代码进行评测。...

    POJ1004-Financial Management

    在解决此类问题时,通常会使用C++等编程语言,因此`POJ1004-Financial Management.cpp`文件很可能包含了用C++编写的源代码。代码可能包含了读取输入、处理数据、计算结果和输出答案等核心功能。同时,`POJ1004-...

    POJ1010-STAMPS

    【标签】"POJ 1010 STAMPS"是问题的标识符,POJ系统中的每个题目都有一个唯一的编号,1010是这个问题在系统中的ID,"STAMPS"可能是题目涉及的主题或关键词,可能与邮票、收集或组合优化有关。 【压缩包子文件的文件...

    POJ3041-Asteroids

    【描述】"解题报告+AC代码"意味着这个压缩包包含了对POJ3041问题的解决方案的详细解题报告,以及已经通过所有测试用例(Accepted,简称AC)的源代码。解题报告通常会包括问题分析、算法设计、时间复杂度计算等内容,...

    poj题目分类

    * 模拟法:通过模拟问题的过程来解决问题,例如 poj1068、poj2632、poj1573、poj2993、poj2996。 2. 图算法: * 图的深度优先遍历和广度优先遍历:例如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 ...

    poj训练计划.doc

    - 分治法:将一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,如`poj3295`。 - 递推:利用已知的基础条件和递推关系式来求解问题,通常用于解决序列问题。 - 模拟法:按照...

    poj各种分类

    例如,poj1328和poj2109就是典型的贪心问题。贪心算法的关键在于正确性证明,确保每一步的局部最优能够导向全局最优。 #### 分治法与递归 分治法是将大问题分解成若干个子问题,递归地求解这些子问题,然后将子问题...

    POJ第1861题源码POJ第1861题源码POJ第1861题源码POJ第1861题源码

    标题中的"POJ第1861题源码"指的是编程竞赛网站POJ(Programming Online Judge)上的第1861道题目,该题目通常会涉及到一个特定的算法或编程问题,而源码则指的是参赛者提交的解决该问题的程序代码。在描述和标签中...

    POJ1201-Intervals

    【描述】"北大POJ1201-Intervals 解题报告+AC代码" 暗示了解决此问题的策略已经记录在解题报告中,并且通过了POJ的自动测试系统(AC即Accepted),意味着提供的代码是正确且高效的。通常,这样的解题报告会包含对...

    POJ3122-Pie

    【标签】"POJ 3122 Pie"是该问题的标识,其中"POJ"是平台名称,"3122"是问题的唯一编号,"Pie"是问题的具体主题。这样的标签方便用户搜索和归类,同时也能反映出问题的基本类型或特点。 【文件】包含两个文件: 1. ...

Global site tag (gtag.js) - Google Analytics