![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
九号新秀
这个作者很懒,什么都没留下…
展开
-
CAA的图 并查集
CAA的图题目要求找到连通路径上最大的L的同时,尽可能找到最小的R。思路:先将所有的边进行排序,按从大到小进行筛选,当两个顶点第一次连通的时候,就找到了边L,此时边L肯定是最大的。再从边L开始,往大的边进行枚举,当两个顶点再次连通的时候,就找到了边R。...原创 2020-12-21 09:57:36 · 104 阅读 · 0 评论 -
leetcode 62 不同路径 Java
题目链接class Solution { // 先初始化第一行,在初始化第一列 public int uniquePaths(int m, int n) { int[][] dp = new int[n][m]; for (int i = 0; i < n; i++) { dp[i][0] = 1; } for (int i = 0; i < m; i++) { dp[0]原创 2020-12-09 09:32:16 · 98 阅读 · 0 评论 -
洛谷 P1029 最大公约数和最小公倍数问题
洛谷 P1029 最大公约数和最小公倍数问题 import java.io.*;/** * @author wangshaoyu */public class P1029最大公约数和最小公倍数问题 { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StreamTokenizer st = new StreamTokenizer(br); stat原创 2020-10-15 09:05:21 · 120 阅读 · 0 评论 -
洛谷 P1835 素数密度
洛谷 P1835 素数密度数据范围[L,R] (L ≤ R ≤ 2147483647, R - L ≤ 1000000),直接线性筛肯定爆炸。埃氏筛法:可以用 10 以内的素数筛选出 100 以内的素数,用 100 以内的素数筛选出 10000 以内的素数。因为每一个合数 A 肯定有一个小于 根号 A 的质因子。所以看数据范围先筛出 50000 以内的素数,再根据已经求出的素数来筛出区间内的数。import java.io.*;import java.util.Arrays;/** * @aut原创 2020-10-14 19:11:49 · 392 阅读 · 0 评论 -
洛谷 P3383 【模板】线性筛素数 欧拉线性筛
洛谷 P3383 【模板】线性筛素数筛素数就是把不是素数的筛掉,剩下的就是素数。本题数据量较大,用埃氏筛法会超时,因为埃氏筛法不是线性的,比如 6 会被 2 筛一次,还会被 3 筛一次,而欧拉线性筛的关键在于:每个合数只被它 最大的非自身的因数 (或者说是它的 最小质因数 ) 筛掉。每一个合数 = 最小质因数 * 最大的非自身的因数。比如 6 只会被 3 (最小质因数 2 )筛掉;12 只会被 6 (最小质因数 2 )筛掉。i的值被筛掉的数24(2 % 2 == 0 brea原创 2020-10-14 10:29:37 · 264 阅读 · 2 评论 -
poj 1724 Roads dfs Java
poj 1724 Roads 这题主要是学习如何剪枝,不只是最优性剪枝(当当前的路径长度大于已经求得的最大路径长度就回到上一步),还学习保留中间计算结果剪枝。minLen [ i ] [ j ] 表示到达城市 i 花费 j 的最小路径长度,并在搜索过程中不断的对该中间结果进行更新。import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.St原创 2020-10-03 16:35:31 · 260 阅读 · 0 评论 -
poj 3278 catch that cow dfs Java
poj 3278 catch that cow 自己一开始用的是dfs,但是dfs需要把所有的情况都求出来,才能得到最快的。所以后来改成了bfs,后来突然想到题目要求的是最快的,相当于最短路径了,所以用了 bfs。import java.util.ArrayDeque;import java.util.Scanner;class Step { int x; // 位置 int steps; // 到达位置 x 所需的步数 public Step(int x, int s原创 2020-10-02 19:39:39 · 185 阅读 · 0 评论 -
洛谷 P1219 八皇后问题 回溯 Java
洛谷 P1219 八皇后问题import java.util.ArrayList;import java.util.Scanner;import java.util.Stack;/** * 八皇后问题 * @author wangshaoyu */public class Main { static int n; static int ans = 0; static ArrayList<ArrayList<Integer>> list = n原创 2020-10-02 15:44:54 · 101 阅读 · 0 评论 -
poj 1321 棋盘问题 回溯 Java
poj 1321 棋盘问题import java.util.Arrays;import java.util.Scanner;/** * @author wangshaoyu */public class POJ1321棋盘问题 { static int n; static int k; static int ans; static boolean[] rows; // 用于标记这一行是否已经放过棋子了 static boolean[] cols; //原创 2020-10-02 14:21:45 · 294 阅读 · 0 评论 -
两道尺取法及证明
POJ3061 Subsequence内容来源于挑战程序设计竞赛假设从 as开始的总和最初大于target的连续子序列表示为as + as+1 + …… + at-1 > targetas+1 + as+2 + at-2 < as + as+1 + at-2 < target而从 as+1开始的总和最初大于target的连续子序列如果是as+1 + …… + at’-1 > target则必有 t’ >= t尺取法:可以用一对数不断维护数组里面原创 2020-10-01 16:39:50 · 114 阅读 · 0 评论 -
hdu 3466 ProudMerchants 01背包 Java
hdu 3466 ProudMerchantsimport java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;class Item { int p; int q; int val; public Item(int p, int q, int val) { this.p = p; this.q = q; this.val =原创 2020-09-29 13:05:15 · 76 阅读 · 0 评论 -
hdu 2639 Bone Collector II 01背包 Java
hdu 2639 Bone Collector II这题比较特殊,求的是第k优解,可以多加一维进行维护。题目要求:获得相同骨骼值的两种方法是相同的。这意味着,这将是一个严格递减的序列从第一个最大值,第二个最大值…到第K个最大值。所以如果骨骼值相同,还需要进行判断去重。import java.util.Scanner;/** * @author wangshaoyu */public class Hdu2602BoneCollector { public static void m原创 2020-09-27 22:13:37 · 70 阅读 · 0 评论 -
hdu 1171 Big Event in HDU 01背包 Java
hdu 1171 Big Event in HDU这道题将所有设施的总价值的一半作为背包容量,直接用01背包解决import java.util.ArrayList;import java.util.Scanner;/** * @author wangshaoyu */public class Hdu1171BigEventinHDU { public static void main(String[] args) { Scanner in = new Scanne原创 2020-09-27 19:56:03 · 69 阅读 · 0 评论 -
hdu 2546 饭卡 01背包 Java
hdu 2546 饭卡贪心 加 01 背包因为要使最后的余额最少,而且还需要大于等于5元才能购买,所以倒数第二次购买后的钱一定要大于或等于 (余额-5),因此背包容量就是 (余额-5)。把最贵的留到最后进行购买。import java.util.Arrays;import java.util.Scanner;/** * @author wangshaoyu */public class Hdu2546 { public static void main(String[] arg原创 2020-09-27 19:13:29 · 148 阅读 · 0 评论 -
hdu 2955 Robberies 01背包 Java
hdu 2955 Robberies这道题自己写得挺久,最坑的一点是自己一开始是用 StreamTokenizer 类读取的,但是一直错,后来用 Scanner 类读取就 accept 了,搞不懂。解这道题有以下关键点:第一:一开始想的是用概率来作为背包容量,但是概率是浮点数,所以只能用钱来作为背包容量。第二:题目中给出的都是被抓的概率,概率之间应该是相乘而不是相加,与一般的01背包不一样。第三:dp[0] 注意初始化为 1, 什么都不偷逃跑的概率为 1。import java.io.IOExc原创 2020-09-26 22:57:22 · 80 阅读 · 0 评论 -
洛谷 P1048 采药 01背包模板题
洛谷 P1048 采药01背包问题,每个物品只能拿一次,且与拿物品的顺序无关,相当于组合。不想要第 i 棵树,和放不进去是一样的,价值和空间都没有变化,也就是前 i-1 棵树 j 时间的最大价值。如果要第 i 棵树,前 i - 1 棵树 j - arr[i - 1][0] 时间的最大价值加上第 i 棵树的价值,因为需要给第 i 棵树留出空间,所以前面 i -1棵树就只剩下 j - arr[i -1][0]的空间了,所以这时候的价值就是 i - 1 棵树 j - arr[i - 1][0]时间加上第 i原创 2020-09-17 20:08:18 · 210 阅读 · 0 评论