
算法题
蓝桥杯、leetcode、pat等
_ELMA_
优快云 SUCK
展开
-
ECNU OJ 3531 定西(爬楼梯) dp Java
来源:https://acm.ecnu.edu.cn/problem/3531/坑点在于如果破损台阶为0,样例不会输出一个空行,如果不特判会报Runtime errorpackage ECNU;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * @date 2021/9/14 10:18 * 定西-走台阶-动态规划 * https://acm.ec原创 2021-09-14 10:47:38 · 189 阅读 · 0 评论 -
leetcode 322 零钱兑换——完全背包问题 Java 题解
原题:https://leetcode-cn.com/problems/coin-change/submissions/没有优化,“在所有 Java 提交中击败了5.01%的用户”,在这里记录一下dp[i][j] = min{dp[i-1][j-k*coins[i]+k,dp[i][j]} ,状态转移不要把+k忘记了public int coinChange(int[] coins, int amount) { /** * dp[i][j] 当前在考虑拿多少第i个硬币,现在总金额原创 2021-09-14 10:08:16 · 233 阅读 · 0 评论 -
2021蓝桥杯 省赛 杨辉三角形 Java
题目给定一个正整数 N,请你输出杨辉三角数列中第一次出现 N 是在第几个数?输入格式输入一个整数 N。输出格式输出一个整数代表答案。代码package blueBridgeCB2021First;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * 杨辉三角形 * AC * https://www.acwing.com/problem/co原创 2021-05-27 20:08:42 · 1973 阅读 · 1 评论 -
2021 蓝桥杯 省赛 砝码称重 题解 Java
题目你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。请你计算一共可以称出多少种不同的正整数重量?注意砝码可以放在天平两边。输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN。输出格式输出一个整数代表答案。数据范围对于 50% 的评测用例,1≤N≤15。对于所有评测用例,1≤N≤100,N 个砝码总重不超过 105。思路当时并没有做出来…看了点y总的思路然后自己做啦。每个砝码有放+Wi、不放0、和放在另一边-原创 2021-05-26 20:48:02 · 2546 阅读 · 0 评论 -
蓝桥杯 change Java
问题描述数组A中共有n个元素,初始全为0。你可以对数组进行两种操作:1、将数组中的一个元素加1;2、将数组中所有元素乘2。求将数组A从初始状态变为目标状态B所需要的最少操作数。输入格式第一行一个正整数n表示数组中元素的个数第二行n个正整数表示目标状态B中的元素输出格式输出一行表示最少操作数题解倒着想将数组B变成全0数组会更简单:最少操作数就是要尽可能多得进行除2操作,就要先将数组里每个奇数减一变成偶数。package ADV;import java.io.BufferedReader;原创 2021-03-25 13:58:49 · 184 阅读 · 0 评论 -
蓝桥杯 分割项链 Java
问题描述两个强盗刚刚抢到一条十分珍贵的珍珠项链,正在考虑如何分赃。由于他们不想破坏项链的美观,所以只想把项链分成两条连续的珍珠链。然而亲兄弟明算账,他们不希望因为分赃不均导致不必要的麻烦,所以他们希望两条珍珠链的重量尽量接近。于是他们找到了你,希望让你帮忙分赃。 我们认为珍珠项链是由n颗不同的珍珠组成的,我们可以通过称重,分别称出每颗珍珠的重量(我们忽略连接珍珠的“链”的重量)。你要求的是每个人至少能得到多重的珍珠(即分赃少的那个人能得到多重的珍珠)。输入格式第一行一个整数n,表示这个珍珠项链有多原创 2021-03-25 11:48:43 · 1017 阅读 · 2 评论 -
蓝桥杯 The Great Wall Game Java 二分图 KM算法
问题描述小华和小沈发明了一个简单的棋盘游戏,他们称之为“长城游戏”。这个游戏需要一个n*n的网格和n颗石子。这些石子随机地放在网格的方格之中,一个格子中最多放一颗石子。每一次移动,可以将任意一颗石子移动到上下左右相邻的空方格之中。游戏的目标是用最少的移动步数,使得n颗石子构成“一堵墙”——排成一条水平、竖直或斜的直线。 现在的问题是,小华和小沈不知道对于一个给定的初始棋盘,达到目标需要移动的最小步数。他们想要你写一个程序能够实现对于任意一个给定的初始状态,求出将所有石子排成一条直线所需要的最小步数。原创 2021-03-24 16:54:58 · 551 阅读 · 0 评论 -
蓝桥杯 植物摆放 Java
问题描述植物大战僵尸这款游戏中,最普通的玩儿法就是玩家摆放植物攻打前来进攻的僵尸。 为了简化问题,我们设棋盘只有1行n列,且僵尸只有一个。一开始僵尸会从最右侧(即第n列)出现,并向左进攻。 在这里,我们提供给玩家两种武器,可以放在棋盘上:炮筒和土豆。炮筒的每次攻击可以让僵尸受到数量为A的伤害,但不堪一击(僵尸1下就能打死它)。而土豆正相反,它没有攻击力,但是它能抵挡僵尸B次进攻。 每一回合,场上所有炮筒会对僵尸先发起进攻,之后僵尸会选择:如果它所在位置有植物,就会攻击一次那个植物;如果所在位置原创 2021-03-21 20:16:49 · 345 阅读 · 0 评论 -
蓝桥杯 种花小游戏 java 状压
问题描述 植物大战僵尸这款游戏中,还有个特别有意思的赚钱方式——种花(能长金币的花)。 种出来的金币需要玩家点击才能得到,或者,玩家可以购买一只蜗牛来帮助捡金币。然而,蜗牛爬得慢是众所周知的。所以,场上有若干金币时,蜗牛总是喜欢以最少的行程来捡走所有的金币。 现在告诉你场上n个金币所在位置的坐标,以及蜗牛所在位置,让你求出蜗牛捡走所有金币的最小行程。输入格式 第一行一个正整数n,表示金币数量 之后n行,每行两个非负整数x、y,分别表示金币所在位置坐标 最后一行两个正整数x、y表示蜗原创 2021-03-20 22:01:54 · 368 阅读 · 0 评论 -
蓝桥杯 Substrings Java
试题 算法提高 Substrings问题描述You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.输入格式The first line of the input conta原创 2021-03-07 21:27:23 · 113 阅读 · 0 评论 -
蓝桥杯 费用流裸题 最小费用最大流 Java
问题描述一个有向图,求1到N的最小费用最大流输入格式第一行N M,表示点数与边数 接下来M行每行s t c d表示一条从s到t的容量为c费用为d的边输出格式最大流与最小费用解题思路SPFA在能流通的情况下不断找最短增广路。部分参考了这位作者:Java实现最小费用最大流问题但是在他的算法中没有考虑两点间有多条边的情况,在找到一条增广路后不能准确找到在增广路里的那条边,如果找错了可能会把这条边的容量减到负数,从而自己生成了负环,提前终止。在我的改进中增加了cost[],把进入增广路的边原创 2021-03-04 21:28:30 · 411 阅读 · 1 评论 -
蓝桥杯 哈密尔顿回路 Java
问题描述给出一个有向图,输出这个图的一个哈密尔顿回路。输入格式输入的第一行包含两个整数n, m,分别表示图的点数和边数。接下来m行,每行包含两个整数,表示一条边的起点和终点。输出格式输出一行,包含一个n个整数,表示一条哈密尔顿回路。如果没有回路输出“No Answer””。数据规模和约定1<=n<=20,图中没有重边。哈密尔顿回路若图G中一个回路通过且仅通过每一个顶点一次,称这个环为哈密顿回路。bfs,耗时太久没有通过全部样例,得分 84package ADV;imp原创 2021-03-03 13:56:05 · 563 阅读 · 0 评论 -
蓝桥杯 研究兔子的土豪 Java 斐波那契数列
斐波那契数列定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)斐波那契数列对任意值取模都有循环节:斐波那契数列a[n]对m取模,由于斐波那契数列的特征,只要存在a[j] mod m = a[k] mod m且a[j+1] mod m = a[k+1] mod m (j<k),则a[j] ~ a[k-1]为循环节。考虑两两相邻的斐波那契数 mod m的数对,最多只有m * (m - 1)种可能(这里没想清楚为什么是m * (m - 1),当原创 2021-02-26 18:09:53 · 220 阅读 · 0 评论 -
蓝桥杯 转圈游戏 快速幂 java
问题描述n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从0 到 n-1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,…,依此类 推。 游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小 伙伴走到第 m+1 号位置,…,依此类推,第n − m号位置上的小伙伴走到第 0 号位置,第 n-m+1 号位置上的小伙伴走到第 1 号位置,…,第 n-1 号位置上的小伙伴顺时针走到第 m-1 号位置。 现原创 2021-02-23 19:04:02 · 198 阅读 · 0 评论 -
蓝桥杯 天天向上 算法提高 java 动态规划
问题描述:A同学的学习成绩十分不稳定,于是老师对他说:“只要你连续4天成绩有进步,那我就奖励给你一朵小红花。”可是这对于A同学太困难了。于是,老师对他放宽了要求:“只要你有4天成绩是递增的,我就奖励你一朵小红花。”即只要对于第i、j、k、l四天,满足i<j<k<l并且对于成绩wi<wj<wk<wl,那么就可以得到一朵小红花的奖励。现让你求出,A同学可以得到多少朵小红花。解:动态规划最关键的是确定状态和转移方程,确定状态需要考虑两方面:最后一步子问题该问题要原创 2021-02-22 18:21:45 · 248 阅读 · 0 评论 -
ADV-369 第二点五个不高兴的小明 动态规划入门
动态规划题目关键是确定状态,然后建立转移方程package ADV;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;/** * AC * 第二点五个不高兴的小明 dp * http://lx.lanqiao.cn/problem.page?gpid=T770 * */public class ADV369原创 2021-02-15 18:41:30 · 482 阅读 · 0 评论 -
2020-09-12 试题 入门训练 Fibonacci数列
试题 入门训练 Fibonacci数列问题描述:Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式: 输入包含一个整数n。输出格式: 输出一行,包含一个整数,表示Fn除以10007的余数。说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。(当原创 2020-09-12 19:35:23 · 204 阅读 · 0 评论