随笔分类 - 算法设计
努力必有所得
摘要:首先,给上题目链接:http://hihocoder.com/problemset/problem/1048 ,简要描述如下: 有1个N*M的盘子,要装2*1的蛋糕,问有多少种方法?(结果对1000000007取余,其中2≤N≤1000,3≤M≤5) 最简单的例子如下: 下面我们来分析: 这个题目类
阅读全文
摘要:问题描述: 假设国际象棋棋盘有5*5共25个格子。设计一个程序,使棋子从初始位置(棋盘格编号为1的位置)开始跳马,能够把棋盘的格子全部走一遍,每个格子只允许走一次。要求: 1) 输出一个解(用二维数组来记录马跳的过程,即[步号,棋盘格编号],左上角为第一步起点),2)求总共有多少解 棋盘格编号为:
阅读全文
摘要:全排列属于组合数学的知识,有序数法,字典序法,临位互换法,本文着重从字典序法(stl中的Next_permutation也是使用此法)对字符串s进行全排列。具体算法如下: I)从后往前找到第一个j,使得s[j]<s[j+1],若未找到,即j=-1时结束 II)从后往前找到第一个k,使得s[k] >
阅读全文
摘要:关于约瑟夫环问题,无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追
阅读全文
摘要:最大子序列: 问题描述:给定整数序列:a1,a2,a3,...an(可能有负数),求a1~an的一个子序列ai~aj,使其和最大 我们很容易得到一个O(n^2)的暴力算法,但是注意到,每次在对s求和时,可能遇到部分和小于0,这样的话,显然应该舍弃前面的部分和序列,重新置s=0,并继续扫描下一个数,显
阅读全文
摘要:16:05:34 2016-05-07 对A^n,我们一般通过连乘(n-1)次,但是我们利用矩阵乘法的结合律做一下简单的改进就能减少连乘的次数,例如,A*A*A*A*A*A => (A*A)*(A*A)*(A*A),可使得连乘次数由5次减少为3次,那么究竟如何利用结合律可以得到最小的连乘次数呢? 答
阅读全文
摘要:POJ 1067 Description 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采
阅读全文
摘要:此方法限制物品重量和背包容量以及价值为整数#include #define N 50//物品数目不多于50个#define M 1000//背包重量不多于1000int w[N];int v[N];short flag[N];//标记选中的物品int m[N][M];//记录物品价值int GetM...
阅读全文