摘要:#include #include #include using namespace std; int k,s[10010]; void MCS() //用dp表示是dp[i+1]=max(dp[i]+s[i+1],s[i+1]);转移方程 { int l=0,ll=0,rr=0; int sum=-100000,mx=-100000; for(int i=0;i...
阅读全文
摘要:#include #include #include using namespace std; int main() { int n,v,c[1003],w[1003]; int dp[1003]; //滚动数组 dp数组表示重量为i时价值为多少。。 while(scanf("%d%d",&n,&v),(n||v)) { ...
阅读全文
摘要:在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包。不能讲物品i装入多次,也不能只装入物品的一部分。因此,该问题被称为0-1背包问题。 将小偷计划要偷的钱的总数作为背包的容量,然后每个银行的存款就作为各个物品的重量, 每个银行小偷的逃跑率就作为每个物品的价值,这样就转化为01背包问题
阅读全文
摘要:转载:http://blog.csdn.net/mu399/article/details/7722810 01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。 01背包的状态转换方程 f[i,j]
阅读全文
摘要:题目 并查集可以检查这个图是否为生成树。。。
阅读全文
摘要:题目 没事回顾一下最短路径算法。练练手。。 spfa 解法 dijkstra解法,直接套用的模板 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> #defin
阅读全文
摘要:题目: 回顾一下。。 直接用dijkstra算法。。
阅读全文
摘要:字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种。用于统计,排序和保存大量的字符串(也可以保存其的)。 优点就是利用公共的前缀来节约存储空间。在这举个简单的例子:比如说我们想储存3个单词,nyist、nyistacm、nyisttc。如果只是 单纯的按照以前的字符数组存储的思路来
阅读全文
摘要:题目 刚开始定义node 变量,之后删除时出现run error ,之后问了别人, 知道 delete 只能删除堆的内存,所以定义了node *root=new node ,AC了。 注:new 和delete 只能用堆里的内存 即new 的内存 再就是注意建完一次树之后就删了建的树。要不内存超出。
阅读全文
摘要:#include #include #include #include #include #include using namespace std; struct node { int cnt;//记录个数; struct node *next[26]; node() { cnt=0; memset(next,NULL...
阅读全文
摘要:自己写的代码,到了最后也没有搞懂自己能的指针,到了网上看了些题解,自己的思路也错了,虽然都用的是字典树解法,虽然走了弯路,,但最后也把指针这地方的知识又回顾了一遍吧。。 也懒得自己打了,明天自己在找个思路做一下吧。。。 自己写的错误代码: #include <cstdio> #include <cs
阅读全文
摘要:题目: 这个题最后一个数据没有通过 ,先这样吧,过几天应该有题解,到时候在完善一下。。。
阅读全文
摘要:题目: 思路 方法一:判断字符串的每一个子串,若是对称的,则求出它的长度即可。这种办法对每一个子串,从两头向中间判断是不是子串。总的时间复杂度为O(n^3), 下面给出时间复杂度是O(n^2)的思路。 方法二:与方法一正好相反,字符串中的每一个开始,向两边扩展,此时可分为两种情况: (1)对称子串长
阅读全文
摘要:#include #include #include #include #include #include using namespace std; struct node { int cnt;//记录个数; struct node *next[26]; node() { cnt=0; memset(next,NULL...
阅读全文
摘要:什么是二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 一个二分图中的最大匹配数等于这
阅读全文
摘要:传送门: 做了专门的最大流问题,刚开始用了最大流上网看了说二分匹配法更好,那就学习了二分匹配法。 最大流解法: 二分图求解:
阅读全文
摘要:题目: 有N台计算机和k个任务,我们可以给每台计算机分配一个任务,每台计算机能够处理的任务种类各不相同,请求出最多能够处理任务的个数;
阅读全文
摘要:#include #include using namespace std; const int c=100000; int s[c],alpha[c],beta[c]; //s表示数值,alpha表示一阶差分,beta表示二阶差分 int main() { int k,n; s[0]=0; s[1]=1; s[2]=4; alpha[1...
阅读全文
摘要:题目: 有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。 测试样例:1 返回: 1 到达n台阶时,可以有两种方法到达n台阶,只需走一级就可以上
阅读全文
摘要:传送门: 以前没接触过最大流问题,刚开始以为是用kruscal算法求最小生成树呢,并且题上也是显示最小树的专题: 反正还行吧,捣鼓了两天,总算稍微理解了一下,等会回来整理一下知识点。
阅读全文
摘要:1 #include 2 #include 3 using namespace std; 4 int sum; 5 int map[101][101]; 6 bool vis[101]; 7 int des[101]; 8 9 void prim(int v,int e) 10 { 11 int i,j; 12 memset(vis,0,sizeof(vi...
阅读全文
摘要:queue 还提供了优先队列,STL提供了更为简单的定义方法,例如,越小的整数优先级越大的优先队列,可以写成priority_queue<int,vector<int>,greater<int> >pq;
阅读全文
摘要:1 #include 2 #include 3 4 using namespace std; 5 6 char a[1002],b[1002]; 7 int s[1004]; 8 int shu(char p) 9 { 10 return p-'0'; 11 } 12 int main() 13 { 14 int lena,lenb; 15 in...
阅读全文
摘要:find函数--查找map的元素。 count函数--统计map中某元素关键字的个数。
阅读全文
摘要:只为学习set 的用法,set就是数学上集合,每个元素只出现一次。和sort一样,所有类型都可以,但是必须定义小于运算符。 count()函数--统计set中某一个元素的个数。 lower_bound和upper_bound函数返回set中元素下界和上届的迭代器 getline()是定义在<stri
阅读全文
摘要:题目: 给定一个无序数组arr,找到数组中未出现的最小正整数。要求:时间复杂度O(n),额外空间复杂度O(1); 变量的解释l:表示从1-l已经存在的数r:表示1-r想要得到的数 初始值:l=0r=n 走的过程 1>当l的位置值等于l+1,表示得到想要的2>当l的位置值<l时,表示l位置的值已经存在
阅读全文
摘要:1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <cstdio> 5 using namespace std; 6 int n; 7 vector<int> pile[30]; 8 9 //找到a所在p
阅读全文
摘要:用二进制表示{0,1,2,3...n-1}的子集s;从右往左第i位表示元素i是否在集合s中。图2表示10100110是如何展示了集合{1,2,5,7}的。 注意:为了方便,最右边的为总是对应元素0,而不是元素1; 异或最重要的性质就是开关型 异或两次相当于没有异或,即A^B^B=A 根据图1不难看出
阅读全文
摘要:1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 int vis[11]; 5 int ans[11]; 6 7 void dfs(int n,int m,int cur) 8 { 9 if(cur==m) 10 {
阅读全文
摘要:1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 int f[1010];//记录当前i的前驱(画完图是树形结构) 5 6 int find(int x) //查找根节点 7 { 8 int r=x; 9 while(
阅读全文
摘要:并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用并查集时,首先会存在一组不相交的动态集合
阅读全文
摘要:欧拉定理 如果一个网络是连通的并且奇顶点的个数等于0或2,那么它可以一笔画出;否则它不可以一笔画出。 判断一笔画的方法: ①是连通的。一个图,如果图上任意二点总有线段连接着,就称为连通的。不是连通的就不能一笔画出。 ②奇点个数是0或者是2。图上线段的端点可以分成二类,奇点和偶数。一个点,以它为端点的
阅读全文
摘要:最小生成树问题,可以用克鲁斯卡尔算法和普利姆算法,Prim最主要的思想是根据顶点来得出结果,而Kruscal则是根据边来得出结果的,因此Prim最要运用于稠密图的计算,而Kruskal主要是运用于稀疏图的计算。因为只能选择一个楼连接到外界供电设备,所以只要构成最小生成树的边的和加上与外界连接花费最小
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 #define N 50 4 int len,a[N]={1}; 5 char tab[100][45]={0,1}; 6 inline int gcd(int a,int b) 7 { 8 return b==0
阅读全文
摘要:1 #include <algorithm> 2 #include <cstdio> 3 using namespace std; 4 typedef struct node { 5 int c,x,y; 6 } node; 7 node s[1010]; 8 9 bool cmp(node a,n
阅读全文
摘要:1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 unsigned short s[20000];//最多可以容纳5000阶乘;且必须为int型,当为short型时,数组元
阅读全文
摘要:1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <stdlib.h> 5 int pre[100005]; 6 typedef struct edge 7 { 8 int v; 9 struct ed
阅读全文