做题
PancrasBohemian
人生如逆旅,我亦是行人。
展开
-
矩阵归零
给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。需要在原矩阵上完成操作。 给出一个矩阵 [ [1, 2], [0, 3] ] 返回 [ [0, 2], [0, 0] ]class Solution {public: /** * @param matrix: A list o原创 2017-07-23 19:08:30 · 334 阅读 · 0 评论 -
dfs买书
蒜头君去书店买书,他有 m 元钱,书店里面有 n 本书,每本书的价格为 p_i 元。蒜头君很爱学习,想把身上钱都用来买书,并且刚好买 k 本书。请帮蒜头君计算他是否能刚好用 m 元买 k 本书。 输入格式 第一行输入 3 个整数m(1≤m≤100000000),n(1≤n≤30),k(1≤k≤min(8,n)) 接下来一行输入 n 个整数,表示每本书的价格pi(1≤pi...原创 2018-03-07 20:44:35 · 264 阅读 · 0 评论 -
dfs 等边三角形 正方形
在计蒜客做到两道dfs的题目,两道题的题干基本一样,除了要创造出来的图形从等边三角形变成了正方形,但是解决的思路都不太一样。如果按照做等边三角形的做法去做正方形的话是会超时的。 注意,题干中说明,所有的木棍都需要用上等边三角形 这个题的思路是,木棒要么放在第一条边,要么放在第二条边,要么第三条边,所以我们dfs是将情况分为这三种。 为了更快的结束,设置一个flag,当得到答案的时...原创 2018-03-09 18:35:54 · 388 阅读 · 0 评论 -
不同行不同列最大值(计蒜客 dfs八皇后问题)
八皇后问题是个很经典的问题,与不同行不同列最大值解法有着异曲同工的地方,还是学一下比较好~~~ 这里面的数组大小是以8*8的棋盘作为依据的,如果想做其他大小棋盘的问题,记得改一下程序内容~ #include<iostream>#include <memory.h>using namespace std;int sum = 0, maxx = 0, ans...原创 2018-03-09 21:14:36 · 2268 阅读 · 0 评论 -
计蒜客 走迷宫2 bfs
一样的迷宫,这次要求不是求有多少条出去的路,而是求最短出去的路,使用bfs就可以知道了。 需要用一个char数组保存迷宫 一个int数组表示距离长度 一个bool数组表示是否访问过(这不是唯一的,还有其它的可能性,可以三合一,如这里的表示方式)问题描述给你一个 n 行 m 列的二维迷宫。’S’表示起点,’T’ 表示终点,’#’ 表示墙壁,’.’ 表示平地。你需要从 ‘S’ 出发走...原创 2018-03-10 19:41:27 · 598 阅读 · 0 评论 -
并查集--C++
并查集主要是由一个father数组,以及find和merge两个函数构成。1、初始化father数组void init() { for (int i = 1; i <= n; ++i) { father[i] = i; }}2、查找int get(int x) { if (father[x] == x) { // x 结点...转载 2018-03-04 16:49:28 · 2616 阅读 · 0 评论 -
并查集--网络交友
在网络社交的过程中,通过朋友,也能认识新的朋友。在某个朋友关系图中,假定 A 和 B 是朋友,B 和 C 是朋友,那么 A 和 C 也会成为朋友。即,我们规定朋友的朋友也是朋友。现在要求你每当有一对新的朋友认识的时候,你需要计算两人的朋友圈合并以后的大小。先输入数字n 再输入n对人名就比并查集多了一个大小,这个大小用另一个并查集保存一下就行,合并的时候注意将两个集合合并,合并...原创 2018-03-05 18:59:03 · 633 阅读 · 0 评论 -
背包问题
总结一下遇到的三种背包问题:0/1背包,完全背包,多重背包。 背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将...原创 2018-04-08 16:22:41 · 316 阅读 · 0 评论 -
欧拉函数与扩展欧几里得
我是真没看懂……把算法留在这把。 欧拉函数int euler(int n){ //返回euler(n) int res=n,a=n; for(int i=2;i*i<=a;i++){ if(a%i==0){ res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 while(a%i==0...原创 2018-04-17 21:31:36 · 313 阅读 · 0 评论 -
给定前序、中序遍历,输出后序遍历
#include <iostream>#include <string.h>#include <algorithm>#include <string>#include <stdio.h>#include <math.h>#include <map>#include <queue&原创 2018-04-28 11:18:43 · 584 阅读 · 0 评论 -
二分图最大匹配——POJ2536_Gopher II
拿他来学了学二分图的最大匹配,搞清楚原理之后,算法比较简单,这个博客讲的很好,细心看十分钟就看明白了 核心就是在于不断地dfs来找到合适的匹配#include <iostream>#include <vector>#include <sstream>#include <set>#include <map>#include ...原创 2018-08-26 19:56:20 · 216 阅读 · 0 评论 -
POJ 3259 Bellman-Ford算法
感觉看到与路径有关,有负权值,输出为YES or NO的基本都是Bellman-Ford算法这个题注意一点就行,普通路径是双向的,虫洞是单向的。//224K 250MS#include <iostream>#include <vector>#include <sstream>#include <set>#include <m...原创 2018-08-29 16:12:23 · 242 阅读 · 0 评论 -
POJ Butterfly
使用队列,核心思想还是找到矛盾的地方,用一个一维数组保存种类,一个二维数组保存关系,如果遍历之后,两种蝴蝶种类的异或与关系矩阵中的内容不符合,那么就是有矛盾,不可能实现。#include <cstring>#include <iostream>#include <queue>#include <math.h>#include <vec...原创 2018-12-17 16:55:06 · 322 阅读 · 0 评论 -
归并排序递归及非递归
归并排序是分治法的典型应用,再复习一下递归对于递归来说,实现起来比较简单,在我们的程序中,主要使用了两个函数,一个是Merge,一个是Mergesort 我们先来看merge,这个merge比较简单,其实就是两个数组的合并,其中i代表第一个待合并数组的起始位置,j代表第二个待合并数组的起始位置。假如说,我们合并{3,5} {4,6}这两个数组(在程序中,都保存在sourceArr中,原创 2018-01-30 12:03:31 · 258 阅读 · 0 评论 -
大数加法以及大数乘法
之前一直觉得大数就是很大的数,unsigned long long就能处理的了……没想到是上百位长的数啊 = =大数加法 给定A,B两个数,A,B的长度均不超过500,求A+B的和#include#include#include#include#define N 1010using namespace std;int main(void) { char原创 2018-01-22 20:35:36 · 395 阅读 · 0 评论 -
用栈模拟汉诺塔问题
在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件: (1) 每次只能移动一个盘子。 (2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。 (3) 每个盘子只能放在比它大的盘子上面。 请写一段程序,实现将第一个堆的盘子原创 2017-07-24 16:46:20 · 328 阅读 · 0 评论 -
有效的括号序列
给定一个字符串所表示的括号序列,包含以下字符: ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括号序列。注意:1、奇数个的长度可以提前判断。 2、如果最后栈不空,直接可以判false。#include <string>class Solution {public: /** * @param s A string * @retur原创 2017-07-25 10:57:01 · 313 阅读 · 0 评论 -
Expression Expand
Given an expression s includes numbers, letters and brackets. Number represents the number of repetitions inside the brackets(can be a string or another expression).Please expand expression to be a str原创 2017-07-25 18:29:30 · 446 阅读 · 0 评论 -
132 pattern
Given a sequence of n integers a1, a2, …, an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k and ai < ak < aj. Design an algorithm that takes a list of n numbers as input and checks whet原创 2017-07-25 19:03:47 · 346 阅读 · 0 评论 -
公共钥匙盒
问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。 每次取钥匙的时候,老师们都会找到自己原创 2017-11-17 14:54:44 · 462 阅读 · 0 评论 -
最长递增子序列
找出一个数组中最长递增序列的长度#include <iostream>using namespace std;int main(){ int a[7] = {9,2,3,4,5,1,3}; sort(a,a+7); int length = 7; int count[7] = {0}; for(int i = 0;i < length; i++ ){原创 2017-11-15 20:16:03 · 220 阅读 · 0 评论 -
学生排队
重点在于理解这个索引数组的使用 一个是stu_pos是学生->位置,就是这个学号的学生在什么位置 另一个是pos_sid是位置->学生,就是这个位置上的学生的学号是什么。 我们一定要记清楚,这两个数组的下标是不会变化的,所以我们以此为依据来移动学生位置。 我一开始用链表做,最多也就30分……还是自己太弱了,题目都不大会做,还是要多练习。#include<iostream>#include<原创 2017-11-21 21:46:10 · 452 阅读 · 0 评论 -
数列分段
谁都会做系列#include<iostream>#include<string.h>#include<algorithm>#include<vector>#include<map>using namespace std;int main(){ int n ,segs = 0,pre = -1,curr=0; cin >> n; vector<int> a; f原创 2017-11-21 22:00:04 · 330 阅读 · 0 评论 -
日期计算
谁都会做系列#include<iostream>#include<string.h>#include<algorithm>#include<vector>#include<map>using namespace std;int dayOfMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};bool isRun(int year){ if(原创 2017-11-21 22:13:32 · 252 阅读 · 0 评论 -
地铁修建
用到了动态规划思想,spfa#include<iostream>#include<algorithm>#include<vector>#include<queue>using namespace std;const int oo = 1e9;const int MAXN = 1e5+5;const int MAXM = 2*1e5 + 5;int N,M;bool inq[MAXN]原创 2017-11-26 19:40:32 · 429 阅读 · 0 评论 -
寒假 简单练习题(一)
写代码的能力差的不止一星半点……但是大部分代码水平高的人也是经过自己的努力一步一步磨练出来的。既然自己之前没有那么辛苦的训练过,那么从现在开始,尽可能的坚持下去,希望能不断地看到自己的进步,加油!一、斐波那契数列快速幂取模递归太容易超时了,上数据结构讲递归的时候,老师总爱拿阶乘和斐波那契数列举例子,搞得自己现在一想起斐波那契数列就写递归,然后英勇超时…… 英勇超时了还好说,改成循环嘛原创 2018-01-21 10:43:54 · 318 阅读 · 0 评论 -
最大子序列和以及最大矩阵和
做题的时候遇到了一个最大矩阵和,搜了一下是从最大子序列和演变而来的,所以先做一下最大子序列和。最大子序列和这个有一个需要注意的事情是,如果矩阵里面所有的元素都是负值,可以返回0,也可以返回最大负数,看具体题目要求一、暴力枚举 O(n^3)对数组来说,一个最大的子序列可以通过遍历从每一个位置开始的序列中得到,所以我们遍历如a1,a2,…,an; a2,a3,…,an等不同长度不同起始位置的序列,不过时原创 2018-01-21 20:13:41 · 679 阅读 · 0 评论 -
POJ 2393 Yogurt factory(贪心)
总时间限制: 1000ms 内存限制: 65536kB描述The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 <= N <= 10,000) weeks, the price of milk and labor will fluctuat...原创 2018-12-18 18:12:21 · 195 阅读 · 0 评论