ACM
文章平均质量分 55
得意霄尽欢
人生得意须尽欢,莫使金樽空对月。
展开
-
dfs求解01背包与分支限界法求解旅行售货员问题(java)
1.利用回溯法求解01背包问题。对于N个物品,在背包的总体积的限制下,有些物品肯定是该舍弃的。对于每件物品都有取和不取俩种情况。我们把所有的情况遍历一次,最后取最优的结果。总体上来就是暴力枚举求最优解。为了更快地求出最优解,有些情况枚举到一半可以立马舍弃。如果拿了当前物品,背包总体积大小会溢出,那么这种情况到这一步就会立马放弃接下来的枚举。代码javapublic class Main { static int N=7;//物品总的个数 static int maxW原创 2021-04-14 22:19:00 · 1000 阅读 · 0 评论 -
算法分析与设计-贪心算法-最短路-最小生成树
1.朴素版的Dijkstra求最短路贪心算法求最短路的证明,考试不考,有兴趣的可以出门左拐百度。这里只说明步骤。步骤概述前提预备:(设有 n 个点,dis [ n ],g [ a ] [ b ] ,vis [ n ] )dis [ n ] 表示 1 号点到 n 号点的当前最短距离g [ a ] [ b ] 表示 a 点与 b 点的距离(这里距离为无穷大时表示俩点不连通)vis [ n ] 表示 n 点是否已经确认到起点的最短路径长度了。(0表示不确定,1表示原创 2021-04-07 17:49:12 · 325 阅读 · 0 评论 -
01背包打印物品与多段图 java
01背包public class Main { public static void main(String[] args) { int c = 25; // 背包总重量为 25 int n = 6; // 总的物品数为 6 int x[] = new int[n+1]; // 是否装入 xi,即 xi = 1/0 (x[0]]位置不用) int w[] = new int[]{0,11,7,9,12,3,10.原创 2021-04-01 12:06:15 · 207 阅读 · 1 评论 -
Dijkstra求最短路(PriorityQueue)
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n,m≤1.5×105,图中涉及边长均不小于0,且不超过10000。输入样例:3 31 2 22 3 11 3 4输出样例:3原创 2020-07-25 17:19:16 · 257 阅读 · 0 评论 -
滑动窗口
模板题给定一个大小为n≤106的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。您只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为[1 3 -1 -3 5 3 6 7],k为3。窗口位置 最小值 最大值[1 3 -1] -3 5 3 6 7 -1 31 [3 -1 -3] 5 3 6 7 -3 31 3 [-1 -3 5] 3 6 7 -3 51 3 -1 [-3 5 3] 6 7 -3 51 3 -1 -3 [5 3 6] 7 3 6原创 2020-07-07 19:22:38 · 353 阅读 · 0 评论 -
区间合并
题目描述给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3]和[2,6]可以合并为一个区间[1,6]。输入格式第一行包含整数n。接下来n行,每行包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围1≤n≤100000,−109≤li≤ri≤109输入样例:51 22 45 67 87 9输出样例:3解决思路首先按照左区间排序,然后依次扫描原创 2020-07-02 15:39:18 · 199 阅读 · 0 评论 -
离散化
概念当一个集合里,个数少,但是值的范围大,并且我们做题需要利用这些值为下标。比如我们总不可能开一个长度为10的9次方的数组。此时我们就需要离散化。也就是将长度为10的5次方个数,且范围在10的9次方以内映射到一个连续的数组里。具体步骤int a[]={1,20,55,90,100000,2520000};此时我们需要做的就是:int b[];b[0]=1;b[1]=20;b[2]=55;.....这里存在俩个问题:1,a中可能存在重复元素(需要去重)java去重方式://这里原创 2020-07-02 14:51:18 · 179 阅读 · 0 评论 -
常用位运算操作
n的二进制表示中,求第k位数是几int n=15;n的二进制就为1111k=0;代表二进制的“个位“,即最右边的那个数。步骤:1,先把第k位移动到个位。n>>k2,看个位是几n&1lowbit(x)如果x的二进制表示为1010,则lowbit(x)=10;x的二进制表示为101000,则lowbit(x)=1000;步骤:lowbit(x)=x&-x;注:在计算机中一个数的负数等于这个数取反再加一...原创 2020-07-02 12:08:31 · 166 阅读 · 0 评论 -
差分
题目描述输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式共一行,包含n个整数,表示最终序列。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列中元素的值≤1000输入样例:6 31 2 2原创 2020-07-02 09:47:17 · 153 阅读 · 0 评论 -
子矩阵和(二维前缀)
题目描述输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1≤y2≤m,−1000≤矩阵内元原创 2020-07-02 08:48:01 · 253 阅读 · 0 评论 -
前缀和
题目描述输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21 32 4输出样例:3610im原创 2020-07-02 08:11:26 · 203 阅读 · 0 评论 -
java高精度四则运算模板
package No1;import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); BigInteger a = in.nextBigInteger(); BigInteger b = in.nextBigInteger(); //Syste原创 2020-07-02 07:46:02 · 155 阅读 · 0 评论 -
数的三次方根模板
题目描述给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。数据范围−10000≤n≤10000输入样例:1000.00输出样例:10.000000import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in)原创 2020-07-01 08:20:03 · 134 阅读 · 0 评论 -
数的范围(二分模板)
题目给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n≤100000原创 2020-07-01 07:50:53 · 131 阅读 · 0 评论 -
求逆序对个数
题目给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100000输入样例:62 3 4 5 6 1输出样例:5算法思路按照归并的思路,将数组分为俩个部分:arr[l,mid] ar原创 2020-07-01 06:39:56 · 2155 阅读 · 0 评论 -
归并模板
package No1;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer;public class Main { public static void main(String[]原创 2020-07-01 06:03:11 · 89 阅读 · 0 评论 -
java快排模板
package No1;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer;public class Main { public static void main(String[]原创 2020-07-01 05:24:22 · 506 阅读 · 1 评论 -
pink子字符串(横纵向思维)
个人理解:最初我想的是首先把pink拼出来,再枚举三种情况取最大,然后再循环拼pink,这也就是横向思维,也是最笨的方法,结果不出所料,timelimitout。正确理解:第一步不应该是拼pink,而应该是将第一种情况(假设p…i为最大的一种情况来枚举)作为第一步,也就是纵向思维,这种情况必然n…k最小前提下再i…n最小的条件下,p…i结果肯定最大。最后再枚举另外俩种情况。代码:impor...原创 2020-04-09 01:04:55 · 257 阅读 · 0 评论 -
扑克牌最大分组(二分检索)
题意:给出n种扑克牌,每种arr[i]张,另外有m张万能牌,万能牌只能替代加入成一组,问最多分多少组。题解:如小学学过的验证法,验证答案的正确性,而这题的答案可以通过二分假设,代码如下:import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in =...原创 2020-04-06 16:51:16 · 363 阅读 · 0 评论 -
StreamToken输入输出挂,读取到文件结束
package k;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer;i...原创 2020-01-13 10:20:39 · 360 阅读 · 0 评论 -
java快速输入输出流(模板)
package No2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer...原创 2020-01-12 08:50:55 · 450 阅读 · 0 评论 -
余数之和(数论)
首先明白:k % n = k * n - k / n * n;这里的k/n是向下取整;n=10 k=5n : 1 2 3 4 5 6 7 8 9 10k/n: 5 2 1 1 1 0 0 0 0 0由上可知:可以对上面的k/n进行一个分块令long temp=k/n;则long right=k/temp;这里的right刚刚好是该块的...原创 2019-11-29 20:31:12 · 414 阅读 · 0 评论 -
n皇后位运算优化
有一个公式:int p=a&-a;如果a=10100;~a=01011;-a=01100;p=00100;如上,刚刚好求得a的最后一位1的位置、算法复杂度,针对n=15来说由普通的递归25s==》2simport java.util.Scanner;public class Main{ private static int ans=0; private stati...原创 2019-11-23 16:27:12 · 167 阅读 · 0 评论 -
位运算
原创 2019-11-22 16:22:46 · 84 阅读 · 0 评论 -
HeapSort(Java实现)
把一个二维数组拿来当桶使用,10个桶用来存0-9数字,还有一个桶用来存负号,这里,我用的arr[10][]来存负号的特殊数组元素,直接上代码:package sort;import java.io.BufferedInputStream;import java.util.Scanner;public class bucts { public static int length;// ...原创 2019-10-26 01:46:30 · 216 阅读 · 0 评论 -
SCOI2008配对
输入描述第一行为一个正整数 nn,接下来是 nn 行,每行两个整数 A_iAi 和 B_iBi ,保证所有 A_iAi 各不相同,B_iBi 也各不相同。输出描述输出一个整数,即配对整数的差的绝对值之和的最小值。如果无法配对,输出 -1−1。样例输入 133 6545 1060 25样例输出 132package No1;import ja...原创 2019-10-22 22:00:32 · 192 阅读 · 0 评论 -
定价
在市场上有很多商品的定价类似于 999 元、4999 元、8999 元这样。它们和 1000 元、5000 元和 9000 元并没有什么本质区别,但是在心理学上会让人感觉便宜很多,因此也是商家常用的价格策略。不过在你看来,这种价格十分荒谬。于是你如此计算一个价格 pp(pp 为正整数)的荒谬程度:首先将 pp 看做一个由数字组成的字符串(不带前导 00);然后,如果 pp 的最后一个字符是 0...原创 2019-10-22 17:53:10 · 481 阅读 · 0 评论 -
Merge Sort(Java实现)
package sort;public class guibin { public static void main(String[] args) { int arr[] = { 4564, 45, 884, 854, 8, 556, 4, 5 }; gb(arr, 0, arr.length - 1); bl(arr); } public static void gb(i...原创 2019-10-20 20:58:05 · 680 阅读 · 1 评论 -
Cheap Sort(Java实现)
package sort;public class DuiSort { public static void main(String[] args) { int arr[] = { 5656, 5656, 88, 9956, 999, 565, 665, 959, 66, 1, 2, 555 }; DuiSort(arr, arr.length - 1); } static v...原创 2019-10-20 20:56:44 · 108 阅读 · 0 评论 -
Quickly Sort(java实现)
package sort;public class QuitSort { public static void main(String[] args) { int arr[] = { 44564, 464, 8484, 464, 5484, 54 }; kp(arr, 0, arr.length - 1); bl(arr); } public static void kp(...原创 2019-10-20 20:55:17 · 167 阅读 · 0 评论 -
Shell Sort(Java实现)
优化版的插入排序。package sort;public class hashsort { public static void main(String[] args) { int arr[] = { 3, 2, 1, 454, 45456, 35, 99595, 54 }; cr(arr); bl(arr); } public static void cr(int ar...原创 2019-10-20 20:54:04 · 232 阅读 · 0 评论 -
对自定义的对象排序
使用collections工具,并且重写compare方法第一关键字是年龄,第二关键字是heigh高package No1;import java.io.BufferedInputStream;import java.util.*;public class Main { public static void main(String[] args) { Scanner in = ...原创 2019-10-20 01:22:07 · 325 阅读 · 0 评论 -
TreeMap的对象排序
结果:package No1;import java.io.BufferedInputStream;import java.util.Map;import java.util.Scanner;import java.util.Set;import java.util.TreeMap;public class Main { public static void main(Str...原创 2019-10-20 00:32:11 · 513 阅读 · 0 评论 -
城市支援(java实现)
题目描述1267年,战争的味道在空气中弥漫,强大的尼弗迦德帝国蓄势待发。觊觎着雅鲁加河对岸的北方领域。莱里亚的女王米薇为了抵御尼弗迦德帝国的进攻,在莱里亚王国内建造了 nn 个城市。第 ii 个城市中居住着 w_iwi 个公民。当尼弗迦德帝国进攻某一个城市时,其他所有城市将支援被进攻的城市。但这些城市的居民会因为支援其他城市而产生不满意度。当城市 aa 要前往城市 bb 支援时,会产生...原创 2019-10-19 13:27:29 · 177 阅读 · 0 评论