`

poj 1837DP 问题

 
阅读更多

题意:在平衡秤上,左右分别有n个固定点,给你m个重量的秤砣,要求你把这些秤砣全部用上并保持平衡,求这样的组合有多少?

 

 

思路:这个题我做的时候是归类在0-1背包里,然后这题又不是常规的求最优解,所以可以联想到给出若干物品  求其能组合的类型有多少这类类型的题目,分析知它最大的值为20*15*25=7500,然后乘上20=15000。明显可以用数组装下。所以可以这样定义它的状态:dp[i][j]i为(1m),j为(-7500,7500)》即在用第i个秤砣的时候,在力矩为j的位置的组合数,然后其初始状态为d[0][7500]=1,即什么都不放时在平衡点的组合数为1
其实数组书可以只用开到7500,因为超过3750就没必要继续保存即这种条件下已经不能回到平横状态了。

关于状态转移方程的问题:一开始很难想到怎么样记录状态,但是我们发现要求的是平衡的种类数,因此我们可以想到的是dp数组保存的是平衡时候的种类数,但是我们为了想到一个比较好的能够保存状态并且展现最终的种类数的记录状态的方式,于是我们尝试使用dp[i][j]表示使用使用了前i个物品时,使得天平左右相差为j的时候的种类数。于是我们很容易得到状态转移方程,dp[i]可以由dp[i-1]的一个值,放第i个物品在挂钩某个位置,转移到dp[i][j],dp[i][j]就是所有这些满足合法条件的dp[i-1]的总和

#include <iostream>
using namespace std;
const int mMax=22;
const int nMax=15000;
const int temp=7500;

int hoo[mMax],wei[mMax];
int dp[mMax][nMax];

int main()
{
	int i,j,c,g,v,val;
	while (scanf("%d%d",&c,&g)!=EOF)
	{
		for (i=1;i<=c;i++)
			cin>>hoo[i];
		for (j=1;j<=g;j++)
			cin>>wei[j];
		memset(dp,0,sizeof(dp));
		dp[0][temp]=1;
		for (i=1;i<=g;i++)
			for (j=1;j<=c;j++)
			{
				val=wei[i]*hoo[j];
				for (v=0;v<=nMax;v++)
					if (dp[i-1][v]!=0)
						dp[i][val+v]+=dp[i-1][v];//状态转移方程
			}
			cout<<dp[g][temp]<<endl;
	}
	return 0;
}

 

 

 

其实这道题目并不能算严格意义上的DP或者0/1背包问题,至于动态规划与0/1背包问题,将在以后会深入学习并加以理解。

 

 

 


 

分享到:
评论

相关推荐

    poj dp总结,动态规划分类

    ### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...

    poj_dp分类

    ### poj_dp分类解析 #### 概述 在本篇文章中,我们将深入探讨并解析PoJ (Pacific Ocean Judger) 平台上与动态规划(Dynamic Programming, DP)相关的题目分类及其特征。通过这些题目,读者可以更好地理解动态规划的...

    poj 1191 经典dp 源代码

    根据标题“poj 1191 经典dp 源代码”和描述中的信息,可以推测此题目是一个经典的动态规划问题。题目要求通过划分一个二维矩阵为多个不重叠的矩形区域,使得每个矩形区域的平均值与整体平均值之差的平方和最小。这个...

    POJ 放炮问题 1185

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

    POJ1837_AC_16MS_984K

    这道题关键是要能够表示出状态转移方程 从题目想到这一步不容易

    POJ算法题目分类

    * 背包问题:背包问题是指解决问题的背包问题算法,如 poj1837、poj1276。 * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何...

    poj 3342(树状dp)

    ### Poj 3342 (树状DP) #### 题目背景 这是一道典型的树状动态规划问题,来源于POJ平台编号为3342的题目。题目描述了一个公司的组织结构,并提出了一种特定场景下的最优解求法。 #### 题目解析 在题目描述中提到...

    POJ1015-Jury Compromise【动态规划DP】

    POJ 1015是题目在POJ平台上的唯一标识,"Jury Compromise"是题目的英文名称,而"动态规划"和"DP"则是指用于解决问题的算法。 【压缩包子文件的文件名称列表】中的 "POJ1015-Jury Compromise.cpp" 是C++语言编写的源...

    动态规划算法poj1088滑雪实验报告

    标题中的“动态规划算法poj1088滑雪实验报告”指的是使用动态规划算法解决北京大学ICPC在线测评系统POJ中编号为1088的滑雪问题。这个问题旨在通过一个直观的应用实例,帮助学习者深入理解动态规划的概念,并熟练运用...

    poj题目分类

    * 背包问题:例如 poj1837、poj1276。 * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj...

    poj训练计划.doc

    - 背包问题:如`poj1837, poj1276`。 - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共...

    POJ题目简单分类(ACM)

    - **背包问题**:如poj1837,解决有限资源下的最优化问题。 - **表格型DP**:如poj3267,通过状态转移矩阵求解问题。 6. **数学**: - **组合数学**:包括计数原理、排列组合以及递推关系,如poj3252。 - **...

    POJ3080-Blue Jeans

    【描述】"北大POJ3080-Blue Jeans" 的解题报告通常会包含以下几个部分:问题描述、输入格式、输出格式、数据范围限制、解题思路以及AC(Accepted)代码。AC代码意味着该代码已经通过了所有测试用例,成功解决了问题...

    POJ3411-Paid Roads【class】

    标题中的"POJ3411-Paid Roads【class】"指的是一个编程竞赛问题,源自北京大学的在线评测系统POJ(Problem Online Judge)。这个题目可能涉及到道路付费的问题,需要通过编程来解决。"class"在这里可能指的是在解决...

    acm poj300题分层训练

    5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj2635、poj3292等训练了数论知识。 **中级阶段**则更加强调复杂算法...

    POJ1416-Shredding Company

    该题目是一道典型的计算机科学中的算法问题,主要涉及动态规划(Dynamic Programming,简称DP)的解决策略。 【描述】"北大POJ1416 - 撕碎公司 解题报告+AC代码" 解题报告通常包括问题分析、算法设计、代码实现和...

    算法设计与分析 POJ2000金币问题的解决方案

    标题中的“POJ2000金币问题的解决方案”指的是一个算法问题,源自POJ(Programming Online Judge)这个在线编程竞赛平台。这个问题涉及到一个数学序列和动态规划或回溯算法的运用。 问题描述的是国王按照特定规则...

    acm新手刷题攻略之poj

    - 推荐题目:[poj1837](https://vjudge.net/problem/POJ-1837)、[poj1276](https://vjudge.net/problem/POJ-1276) - 概率论问题通常涉及事件的概率计算,需要理解条件概率、期望等概念。 2. **期望** - 推荐题目...

    POJ3126-Prime Path

    4. **动态规划(Dynamic Programming, DP)**:虽然这不是必需的,但一些复杂的问题可以通过DP来优化求解过程,比如预计算某些节点是否为素数,或者记录已遍历过的路径。 5. **素数判断**:快速有效地判断一个数...

Global site tag (gtag.js) - Google Analytics