算法思想
Casionx
爱家人 爱自己 爱生活 爱coding
展开
-
快速幂取余算法思路详解
【概述】 计算xyx^y % n;如果采用常规方法,当x与y都比较小的情况下,采用直接计算可以,但是如果当x跟y都非常大的时候,如210002^{1000} % 100000,那该如何解决呢? 【离散数学有关余数知识点补充】 重视余数的性质: 1. (a+b)%m == (a%m+b%m)%m 2. a*b%c=((a%c)*b)%c 3. aba^b%c=(a%c)原创 2017-03-03 10:06:07 · 4645 阅读 · 1 评论 -
八皇后问题简单解法
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。 仔细分析此题,可以发现:如果我们从第一行开始放置,每行放置一原创 2017-03-13 19:24:06 · 1318 阅读 · 2 评论 -
递归的应用-回溯
【转自《王道上机指南》】 题目1459:Prime ring problem 题目描述: A ring is compose of n circles as shown in diagram. Put natural number 1, 2, …, n into each circle separately, and the sum of numbers in two adj...原创 2017-03-13 16:24:10 · 692 阅读 · 0 评论 -
0-1背包问题
【01背包】 有N件物品和一个载重为W的背包。第i件物品的重量是w[i]w[i],价值是v[i]v[i]。 求解背包最多能装下的价值是多少? 【解法一 动态规划】 思路分析: 对于每件物品,只有两种情况:装?不装?。 假设dp[i][j]表示在背包剩余载重j的情况下,前i个物品能达到的最大价值。 对于第i个物品, 如果w[i]>j,放不进去,不能放,故dp[i][j]=dp[i-1]原创 2017-03-11 13:37:20 · 523 阅读 · 2 评论 -
整数分解方法
题目大意:给定一个整数n,找到k个数,使得其和等于n。 如:4=1+1+1+14=1+1+2;4=1+3;4=2+2;4=4;求其分解的所有可能,并输出分解表达式。 解题思路:要拆分整数n,肯定先要找到一个元素,然后我们会发现,剩下的问题还是一个整数差分问题,因此容易得到问题的解。 定义函数f(n)为n可以拆分的解的个数,即可以先拆分出一个数字k(k = 1,2,……,n...原创 2017-03-16 13:42:43 · 28505 阅读 · 7 评论 -
大整数转换为其他进制数
如何对 一个1000位(即1099910^{999})以内的十进制大数M进行进制K(K<=16)的转换。 思路分析: 对一个大数M的存储可以利用字符串string来存储输入,并且在这里使用string相对于数组来说,更容易操作。 我们需要模拟M除以K和M对K取余操作。 从第一位开始,对M每一位M[i]表示的整数进行判断。 如果M[i]<<K,就商零。【如果在第一位,也商0,原创 2017-03-10 18:38:17 · 921 阅读 · 0 评论 -
最长递增子序列
最长递增子序列是动态规划中最经典的问题之一,我们从讨论这个问题开始,循序渐进的了解动态规划的相关知识要点。 在一个已知的序列 {a1,a2,...ana_1, a_2,...a_n} 中,取出若干数组成新的序列{ai1,ai2,...aima_{i1}, a_{i2},...a_{im}} , 其中下标i1、i2…im i1、i2…im 保持递增,即新数列中的各个数之间依旧保持原数列中的 先后顺原创 2017-03-05 16:03:25 · 430 阅读 · 0 评论 -
计算直线的交点方案数
问题描述: 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。 输入:n(n<=20) 输出:每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数。 样例输入 4 样例输出 0 3 4 5 6 【分析】 我们知道:n条直线互不平行且无三线共点的最多交点数max=1+2+……(n-1)=n(n-1)/2,但本题不这么简单,因为问题问的是:这些直原创 2017-03-20 14:41:44 · 2572 阅读 · 0 评论 -
折线分割平面
【题型一】直线分割平面 在一个平面上有一个圆和n条直线,这些直线中每一条在圆内同其他直线相交,假设没有3条直线相交于一点,试问这些直线将圆分成多少区域。 分析: 当添加第N条,为了使平面最多, 则第N条直线要与前面的N-1条直线都相交,且没有任何三条直线相交一个点。 则添加第N条直线会多N-1个交点。由于每增加N个交点,就增加N+1个平面,所以添加第N条直线来会在之前的基础上增加N个原创 2017-03-18 12:48:18 · 6999 阅读 · 0 评论 -
CCF Java 报数游戏循环剔除类问题
【问题描述】 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个...原创 2018-03-03 19:07:15 · 2158 阅读 · 0 评论