
Java算法
Java算法
w_t_y_y
个人在线笔记~,其他博客:https://www.zhihu.com/people/wtyy666
展开
-
算法(16)取球博弈
一、问题引入:今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完。原创 2017-05-17 10:00:06 · 549 阅读 · 0 评论 -
算法(15)动态规划----判定性问题
一、能否被4整除原创 2017-05-15 21:32:17 · 506 阅读 · 0 评论 -
算法(14)动态规划----最大子矩阵
一、最大01子矩阵参见http://www.cnblogs.com/fstang/archive/2013/05/19/3087746.html原创 2017-05-13 14:33:18 · 525 阅读 · 0 评论 -
算法(13)动态规划----递推
一、核电站问题1.问题引入2.思路分析3.代码如下原创 2017-04-07 17:08:56 · 554 阅读 · 0 评论 -
算法(12)动态规划----计数问题
一、砝码称重1.问题引入2.思路分析3.代码如下原创 2017-04-06 11:46:12 · 531 阅读 · 0 评论 -
算法(11)动态规划----树型动态规划
一、原创 2017-04-05 20:33:50 · 413 阅读 · 0 评论 -
算法(十)动态规划----贪心的动态规划问题
一、快餐问题1.问题引入Peter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由A个汉堡,B个薯条和C个饮料组成。为了提高产量,Peter从著名的麦当劳公司引进了N条生产线。所有的生产线都可以生产汉堡,薯条和饮料,由于每条生产线每天所能提供的生产时间是有限的、不同的,而汉堡,薯条和饮料的单位生产时间又不同。这使得Peter很为难,不知道如何安排生原创 2017-04-04 15:53:45 · 677 阅读 · 0 评论 -
算法(九)动态规划----剖分问题
一、石子合并1.问题引入在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。第一行输入一个正整数n,第二行输入n个正整数表示每一堆的石子数,最后分别输出最小得分和最大得分。样例输入:44 4 9 5样例输原创 2017-04-03 16:09:46 · 445 阅读 · 0 评论 -
算法(八)动态规划----线性动态规划
一、朴素最长非降子序列1.问题引入2.思路分析3.代码如下:原创 2017-04-03 14:59:41 · 565 阅读 · 0 评论 -
算法(七)动态规划----资源问题
一、机器分配问题1.问题引入:总公司拥有高效生产设备M台,准备分给下属的N个公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M《=15,N〈=10。分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数M。第一行输入两个数,第一个数是设备台数M,第二个数是分公司数N。接下来是一个M*N的矩阵原创 2017-04-03 11:57:14 · 1851 阅读 · 0 评论 -
算法(七)100个经典的动态规划方程
1.资源问题1-----机器分配问题F[I,j] = max(f[i-1,k]+w[i,j-k])2.资源问题2------01背包问题F[i,j] = max(f[i-1,j-v]+w,f[i-1,j]);3.线性动态规划1-----朴素最长非降子序列F = max{f[j]+1}4.剖分问题1-----石子合并原创 2017-04-02 16:44:01 · 6561 阅读 · 0 评论 -
算法(六)贪心算法简单应用
一、最大最小公倍数:时间限制:1.0s 内存限制:256.0MB锦囊1使用贪心来选择。锦囊2当n为奇数时,答案一定是n*(n-1)*(n-2)。当n为偶数时,答案可能是(n-1)*(n-2)*(n-3),也可能是n*a*b,其中a>=n-3。问题描述已知一个正整数N原创 2017-03-17 17:59:32 · 503 阅读 · 0 评论 -
算法(五)动态规划算法概括
动态规划算法原创 2017-03-17 17:51:35 · 422 阅读 · 0 评论 -
算法(四)动态规划算法简单应用
一、走方格问题1.问题引入:有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100.输入输出样例:第一行,输入n,m表示这个矩阵的行数和列数,接下来的n行,输入每行的m个数原创 2017-03-16 14:33:54 · 2807 阅读 · 0 评论 -
算法(三)回溯算法概括
X星球要派出一个5人组成的观察团前往W星。其中:A国最多可以派出4人。B国最多可以派出2人。C国最多可以派出2人。....那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。数组a[] 中既是每个国家可以派出的最多的名额。程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFF原创 2017-03-15 20:47:05 · 484 阅读 · 0 评论 -
算法(二)回溯算法简单应用
一、问题引入:八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。二、思路分析:本题运用回溯法,从第一行开始,每行放入一个,这样能够保证每一行不会重复。首先每一行放置均会循环,也就是每一行的皇后都原创 2017-03-14 15:22:06 · 902 阅读 · 0 评论 -
算法(一)五大常用算法杂谈
五大常用算法:原创 2017-03-14 15:19:28 · 483 阅读 · 0 评论 -
第七届蓝桥杯总决赛 整数的划分问题
问题引入:如,对于正整数n=6,可以分划为:6,5+1,4+2, 4+1+1 3+3, 3+2+1, 3+1+1+1 2+2+2, 2+2+1+1, 2+1+1+1+1 1+1+1+1+1+1+1 现在的问题是,对于给定的正整数n,编写算法打印所有划分。 用户从键盘输入 n (范围1~10) 程序输出该整数的所有划分。思路分析:整数划分问题是算法中的一个经典命题之一,有关这个原创 2017-05-12 20:38:10 · 611 阅读 · 0 评论 -
第六届蓝桥杯总决赛 四阶幻方
题目:四阶幻方把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。比如: 1 2 15 16 12 14 3 5 13 7 10 4 8 11 6 9以及: 1 12 13 8 2 14 7原创 2017-05-10 14:57:32 · 1106 阅读 · 0 评论 -
第六届蓝桥杯总决赛 穿越雷区
标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。例如:A + - + -- + - - +- + + + -转载 2017-05-10 16:22:07 · 380 阅读 · 0 评论 -
第六届蓝桥杯java 移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3… 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 …..我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)输入为3个整数w m n,空格分开,都在1到10原创 2017-03-13 15:26:14 · 468 阅读 · 0 评论 -
K好数
时间限制:1.0s 内存限制:256.0MB 锦囊1使用动态规划。锦囊2用F[i][j]表示长为i,最后一位数字是j的K好数的个数,则F[i][j]=\sum F[i-1][k],其中|j-k|!=1。问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L转载 2017-03-09 21:44:22 · 248 阅读 · 0 评论 -
第七届蓝桥杯java 搭积木
搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法: 0 1 2 3 4 56 7 8 9 0 3 1 7 5 29 8 6 4 请你原创 2017-03-16 14:13:47 · 2653 阅读 · 0 评论 -
第六届蓝桥杯java 饮料换购
饮料换购乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。输入:一个整数n,表示开始购买的饮料数量(0输出:一个整数,表示实际得到的饮料数例如:用户输入:100程序应该输出:149原创 2017-03-13 20:50:48 · 1200 阅读 · 0 评论 -
最小乘积(基本型)
时间限制:1.0s 内存限制:512.0MB问题描述 给两组数,各n个。 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25输入格式原创 2017-03-11 10:46:16 · 220 阅读 · 0 评论 -
关联矩阵
时间限制:1.0s 内存限制:512.0MB 问题描述 有一个n个结点m条边的有向图,请输出他的关联矩阵。输入格式 第一行两个整数n、m,表示图中结点和边的数目。n 接下来m行,每行两个整数a、b,表示图中有(a,b)边。 注意图中可能含有重边,但不会有自环。输出格式 输出该图的关联矩阵,注意请勿改变边和结点的顺序。转载 2017-03-10 20:40:18 · 782 阅读 · 0 评论 -
最短路
时间限制:1.0s 内存限制:256.0MB问题描述给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。输入格式第一行两个整数n, m。接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。输出格式共n-1行,第i行表示转载 2017-03-10 20:27:56 · 341 阅读 · 0 评论 -
特殊回文数
时间限制:1.0s 内存限制:512.0MB问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式 输入一行,包含一个正整数n。输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52原创 2017-03-09 20:20:15 · 271 阅读 · 0 评论 -
最大最小公倍数
时间限制:1.0s 内存限制:256.0MB问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 6。原创 2017-03-09 21:24:03 · 244 阅读 · 0 评论 -
区间k大数查询
时间限制:1.0s 内存限制:256.0MB问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小原创 2017-03-09 21:02:06 · 179 阅读 · 0 评论 -
Fibonacci数列
Fibonacci数列 时间限制:1.0s 内存限制:256.0MB问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10原创 2017-03-09 16:40:45 · 349 阅读 · 0 评论 -
圆的面积
入门训练 圆的面积 时间限制:1.0s 内存限制:256.0MB问题描述给定圆的半径r,求圆的面积。输入格式输入包含一个整数r,表示圆的半径。输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出原创 2017-03-09 19:18:41 · 331 阅读 · 0 评论 -
字串统计
时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。输入格式 第一行一个数字L。 第二行是字符串S。 L大于0,且不超过S的长度。输出格式 一转载 2017-03-11 14:08:08 · 238 阅读 · 0 评论 -
出现次数最多的整数
时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。 输入格式:第一行是一个整数N,N £ 20;接下来原创 2017-03-11 14:32:02 · 307 阅读 · 0 评论 -
最大的算式
时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如: N=5,K=2,5个数字分别为1、2、3、4、5,可以加成: 1*2*(3+4+5)=24转载 2017-03-11 16:58:04 · 359 阅读 · 0 评论 -
第七届蓝桥杯java 压缩变换
压缩变换小明最近在研究压缩算法。他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值很小是一个挑战。最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个变换来减小数字的值。变换的过程如下:从左到右枚举序列,每枚举到一个数字,如果这个原创 2017-03-12 20:24:17 · 803 阅读 · 0 评论 -
第七届蓝桥杯java 冰雹数
冰雹数任意给定一个正整数N,如果是偶数,执行: N / 2如果是奇数,执行: N * 3 + 1生成的新的数字再执行同样的动作,循环往复。通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。就这样起起落落的,但最终必会落到“1”这有点像小冰雹粒子在冰雹云中翻滚增长的样子。比如N=99,28,14,7,22,11,34,17,52,26,13,40,2原创 2017-03-13 19:36:39 · 3245 阅读 · 0 评论 -
第七届蓝桥杯java 交换瓶子
交换瓶子有N个瓶子,编号 1 ~ N,放在架子上。比如有5个瓶子:2 1 3 5 4要求每次拿起2个瓶子,交换它们的位置。经过若干次后,使得瓶子的序号为:1 2 3 4 5对于这么简单的情况,显然,至少需要交换2次就可以复位。如果瓶子更多呢?你可以通过编程来解决。输入原创 2017-03-12 19:25:09 · 424 阅读 · 0 评论 -
2的次幂表示
时间限制:1.0s 内存限制:512.0MB 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0)原创 2017-03-11 16:10:41 · 366 阅读 · 0 评论 -
第七届蓝桥杯java 牌型种数
牌型种数小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。代码如下:public class转载 2017-03-13 14:32:40 · 595 阅读 · 0 评论