- 浏览: 204271 次
- 性别:
- 来自: 武汉
-
文章分类
- 全部博客 (137)
- c++ (74)
- c++,算法,回溯 (2)
- DP问题。 (9)
- DP问题,0/1背包问题 (3)
- 数学问题 (6)
- 贪心算法 (10)
- 排序 (16)
- 数据结构 (7)
- 容器 (2)
- 模拟问题 (2)
- 水题 (8)
- 并查集 (3)
- 非技术 (2)
- 素数问题 (1)
- DFS (3)
- 二叉树 (1)
- 递归 (1)
- 图论 (5)
- 最小生成树 (5)
- 最短路径 (6)
- bell_flaod算法 (2)
- hash (3)
- 二分查找 (1)
- 搜索 (5)
- BFS (5)
- STL (3)
- 字符串hash (1)
- 拓扑排序 (1)
- 字典树 (4)
- 哈弗曼树 (1)
- KMP (7)
- 线段树 (9)
- 树状数组 (6)
- 全排列 (2)
- DP问题 (2)
- LCS (1)
- 最长不下降子序列 (2)
- 面试经验 (3)
题意:在平衡秤上,左右分别有n个固定点,给你m个重量的秤砣,要求你把这些秤砣全部用上并保持平衡,求这样的组合有多少?
思路:这个题我做的时候是归类在0-1背包里,然后这题又不是常规的求最优解,所以可以联想到给出若干物品 求其能组合的类型有多少这类类型的题目,分析知它最大的值为20*15*25=7500,然后乘上20=15000。明显可以用数组装下。所以可以这样定义它的状态:dp[i][j]《i为(1,m),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背包问题,将在以后会深入学习并加以理解。
发表评论
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
2013-08-29 14:34 857虚函数:虚函数是C++中用于实现多态(polymorphis ... -
排序算法总结
2013-05-17 11:00 856选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, ... -
poj 3122
2012-12-11 19:51 886题意:作者要开一个生日party,他现在拥有n块高度都为1 ... -
poj 3273
2012-12-11 16:49 1000题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份 ... -
poj 1080
2012-08-03 16:12 1246题意: 给两串DNA序列,按照给定的方法找他们最大的相似 ... -
字典树学习材料
2012-05-30 14:29 983字典树,又称单词查找树,Trie树,是一种树形结构,典型应 ... -
poj 1159
2012-05-28 19:08 1465题目大意:给你一段字符串,让你求出在中间最少加入几个字符 ... -
poj 3176
2012-05-28 14:47 1044大致题意: 输入一个n层的三角形,第i层有i个数,求从第 ... -
poj 1260
2012-05-28 09:54 1630题意解释: 有n个等级的珠宝,等级依次升高,等级越高价钱越高 ... -
poj 1836
2012-05-28 09:22 2732是POJ2533的扩展题。题意不难,令到原队列 ... -
poj 2533
2012-05-26 15:36 1290在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗 ... -
poj 3267
2012-05-26 09:43 818从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况 ... -
poj 1276
2012-05-25 16:20 2422题意: 这道题的意思是给你一堆钱,各种面值的都有,比 ... -
poj 1094
2012-05-25 13:54 1126题意:给出字母个数,和有限个有序对(a<b)求出能确定字 ... -
poj 3393
2012-05-23 17:00 1272大致题意: 科普文一篇,文章80%都是无用信息,因为 ... -
poj 3007
2012-05-14 10:21 1004大致题意: 给定一个字符串,从任意位置把它切为两半, ... -
poj 3096
2012-05-10 21:09 1034题意: 定义D-pairs表示取字符串s中相距为D的两个字母 ... -
poj 1426
2012-04-26 20:11 2181大致题意: 给出一个整数n,(1 <= n <= ... -
poj 1797
2012-04-24 15:05 1637题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载 ... -
poj 1338
2012-04-23 10:20 1272题意:题目意思是求由2,3,5的乘积组成的数从大到小排列,从1 ...
相关推荐
### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...
### poj_dp分类解析 #### 概述 在本篇文章中,我们将深入探讨并解析PoJ (Pacific Ocean Judger) 平台上与动态规划(Dynamic Programming, DP)相关的题目分类及其特征。通过这些题目,读者可以更好地理解动态规划的...
根据标题“poj 1191 经典dp 源代码”和描述中的信息,可以推测此题目是一个经典的动态规划问题。题目要求通过划分一个二维矩阵为多个不重叠的矩形区域,使得每个矩形区域的平均值与整体平均值之差的平方和最小。这个...
这道题关键是要能够表示出状态转移方程 从题目想到这一步不容易
* 背包问题:背包问题是指解决问题的背包问题算法,如 poj1837、poj1276。 * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何...
### Poj 3342 (树状DP) #### 题目背景 这是一道典型的树状动态规划问题,来源于POJ平台编号为3342的题目。题目描述了一个公司的组织结构,并提出了一种特定场景下的最优解求法。 #### 题目解析 在题目描述中提到...
POJ 1015是题目在POJ平台上的唯一标识,"Jury Compromise"是题目的英文名称,而"动态规划"和"DP"则是指用于解决问题的算法。 【压缩包子文件的文件名称列表】中的 "POJ1015-Jury Compromise.cpp" 是C++语言编写的源...
标题中的“动态规划算法poj1088滑雪实验报告”指的是使用动态规划算法解决北京大学ICPC在线测评系统POJ中编号为1088的滑雪问题。这个问题旨在通过一个直观的应用实例,帮助学习者深入理解动态规划的概念,并熟练运用...
* 背包问题:例如 poj1837、poj1276。 * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj...
- 背包问题:如`poj1837, poj1276`。 - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共...
- **背包问题**:如poj1837,解决有限资源下的最优化问题。 - **表格型DP**:如poj3267,通过状态转移矩阵求解问题。 6. **数学**: - **组合数学**:包括计数原理、排列组合以及递推关系,如poj3252。 - **...
【描述】"北大POJ3080-Blue Jeans" 的解题报告通常会包含以下几个部分:问题描述、输入格式、输出格式、数据范围限制、解题思路以及AC(Accepted)代码。AC代码意味着该代码已经通过了所有测试用例,成功解决了问题...
标题中的"POJ3411-Paid Roads【class】"指的是一个编程竞赛问题,源自北京大学的在线评测系统POJ(Problem Online Judge)。这个题目可能涉及到道路付费的问题,需要通过编程来解决。"class"在这里可能指的是在解决...
5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj2635、poj3292等训练了数论知识。 **中级阶段**则更加强调复杂算法...
- **解析**:该问题是区间DP的一个实例。定义`dp[i][j]`表示将区间[i,j]内的小球按序排列所需的最小步数。状态转移方程为`dp[i][j] = min(dp[i][k] + dp[k+1][j] + (s[j]-s[i-1])%2)`,其中`s`为累计小球数量的前缀...
该题目是一道典型的计算机科学中的算法问题,主要涉及动态规划(Dynamic Programming,简称DP)的解决策略。 【描述】"北大POJ1416 - 撕碎公司 解题报告+AC代码" 解题报告通常包括问题分析、算法设计、代码实现和...
标题中的“POJ2000金币问题的解决方案”指的是一个算法问题,源自POJ(Programming Online Judge)这个在线编程竞赛平台。这个问题涉及到一个数学序列和动态规划或回溯算法的运用。 问题描述的是国王按照特定规则...
- 推荐题目:[poj1837](https://vjudge.net/problem/POJ-1837)、[poj1276](https://vjudge.net/problem/POJ-1276) - 概率论问题通常涉及事件的概率计算,需要理解条件概率、期望等概念。 2. **期望** - 推荐题目...
4. **动态规划(Dynamic Programming, DP)**:虽然这不是必需的,但一些复杂的问题可以通过DP来优化求解过程,比如预计算某些节点是否为素数,或者记录已遍历过的路径。 5. **素数判断**:快速有效地判断一个数...