题解列表

筛选

沙子合并-区间动态规划(详细注释C++)

解题思路:1995年的经典题目,采用对区间进行动态规划的思想。每次合并的代价为两堆沙子数量之和,那么最后一次合并的代价就是所有沙子数量之和,当合成进行最后一次合并的两堆沙子所用的代价最小时,总代价最小。问题就变为选择某种区间划分方法,将[1,n]划分为两个大区间[1,k]和[k+1,n],

用最朴素的C语言(不用数组,字符)解决这类问题

解题思路:通过循环的方式使a反复除以10,直至a==0,程序终止,可求得a的位数。再进行分类讨论,因为位数不同情况也不同。注意事项:一定要把数据a存到数据b里,因为循环之后a最终会==0,导致之后输出的结果有误,即00000参考代码:#includeintmain(){inta,

[食物链] 并查集 - NOI2001 提高组

摘要:# 并查集 路劲压缩 ###### 根据题目将所有的动物分为 被捕食 天敌 竞争对手 三种类型 分别存放于 并查集的 三个位置 分别求各自所属的“连通块” 思路 : 如果 1)当前的话与前面……

汉汉汉汉诺诺诺诺塔塔塔塔

解题思路:利用递归思想解决。将问题分为三步:先将n-1个盘子借助目标柱子移动到临时柱子再将最大盘子移到目标柱子最后将n-1个盘子从临时柱子借助起始柱子移动到目标柱子注意事项:参数顺序要正确,确保在递归调用中起始、目标和临时柱子的编号不会出错参考代码:#includevoidhanoi

三角形-(动态规划法)

```javaimportjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){//动态规划例题/*1.找到子问题2.找到递推关系式3.找到初始状态4.得到答案*/Scannerscanner=newScanner(S