随笔分类 - 程序设计优化
摘要:/*set:二叉搜索树维护集合的容器map:维护键和键对应的值的容器*/#include#include#include#includeusing namespace std;int main(){ set s; s.insert(1); s.insert(5); s.insert(3); set::iterator ite; ite = s.find(1); if (ite == s.end())cout m; m.insert(make_pair(1, "one")); m.insert(make_pair(10, "ten")); ...
阅读全文
摘要:/*挑战程序设计竞赛——第2版P73*/#include#include#include#define MAX_N 100using namespace std;int heap[MAX_N], sz = 0;void push(int x){ //自己结点的编号 int i = sz++; while (i > 0) { int p = (i - 1) / 2; //如果没有大小颠倒则退出 if (heap[p] = x)break; heap[i] = heap[a]; i = a; } ...
阅读全文
摘要:#include#include#include#include#define MAX 10000000bool b[MAX];void Prime(){ int num = 0, t = sqrt(1.0*MAX); memset(b, true, sizeof(b)); for(int i=2; i < t; i++) { if(b[i]) { for(int j = 2; j * i < MAX; j++) b[j*i]=false; } } for(int...
阅读全文
摘要:/*4 52 31 23 42 2_____7*/#include#define MAX 1000using namespace std;int max(int n1, int n2){return n1>n2?n1:n2;}int dp[MAX][MAX], n, m, w[MAX], v[MAX];int rec(int i, int j){ if(dp[i][j]>=0) return dp[i][j]; int res; if(i==n){ res=0; }else if(j>n >> m; for(i=0; i>w[i] >>v[i];
阅读全文
摘要:#include#includeint main(){ unsigned int e_n = 0XFFFFFFFE, e_nt = ~e_n;//反 int n = sizeof(e_n); printf("%X\n", e_nt);//十六进制 unsigned int a = 0X00001111,b = a & e_n;//与 printf("%X\n", b); unsigned int c = e_n | a;//或 printf("%X\n", c); unsigned int d = e_n ^ a;//异或 p
阅读全文
摘要:Fence RepairTime Limit:2000MSMemory Limit:65536KTotal Submissions:21209Accepted:6762DescriptionFarmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needsN(1 ≤N≤ 20,000) planks of wood, each having some integer lengthLi(1 ≤Li≤ 50,000) uni
阅读全文
摘要://区间调度/*问题描述:有N项工作,每项工作有开始时间si和结束时间ti,让你选择最多的工作,工作之间不存在时间交叉。输入:51 32 54 76 98 10输出:3*/#include#includeusing namespace std;const int MAX = 100000;int N, s[MAX], t[MAX];//输入,s开始时间,t结束时间pair itv[MAX];//用于对工作排序的pair数组int main(){ cin>>N; int i; for(i=0;i>itv[i].second>>itv[i].first;//便于以结束
阅读全文
摘要:这样求整的算法真是简洁,因为硬币值最后是1,所以任意余数都能整除掉。如果换成其他问题,末尾不是1空怕就不行了。/*问题描述:硬币问题有1元、5元、10元、50元、100元、500元的硬币,用最少的硬币数来支付A元。*/#includeusing namespace std;const int v[6] = {1, 5, 10, 50, 100, 500};int c[6];//输入硬币个数int A;void solve(){ int ans = 0; for(int i = 5; i >=0; i--){ int t = min(A / v[i], c[i]); ...
阅读全文
摘要:/*问题描述:迷宫的最短路径给定N*M的迷宫,找到从起点S到终点G的最短路径长度。(默认一定可以到达终点)输入:10 10#S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#......####.###.....#...G#输出:22*/#include#include#define MAX 101using namespace std;const int INF = 100000000;//一般放大2~4倍不会溢出为标准设无穷大值//使用pair表示状态,用typedef会更方便typedef
阅读全文
摘要:Lake CountingTime Limit:1000MSMemory Limit:65536KTotal Submissions:16840Accepted:8548DescriptionDue to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 #define MAX 101using namespace std;int N,M;char field[MAX][MAX];void dfs
阅读全文
摘要:深搜解题。/*问题描述:部分和问题给定整数a1,a2....an,判断是否可以从中选出若干数,使它们的和恰好为k。0#define MAX 1000using namespace std;int a[MAX],n,k;bool dfs(int i, int sum){ if(i == n) return sum == k; if(dfs(i +1, sum)) return true; if(dfs(i+1, sum+a[i])) return true; return false;}int main(){ int i; cin>>n>>k; ...
阅读全文
摘要:通常求n的斐波那契数,我们就是简单的使用如下的递归函数:int fib1(int n){ if(n#include#define MAX 200using namespace std;int fib1(int n){ if(n<=1) return n; return fib1(n-1)+fib1(n-2);}int memo[MAX+1];int fib2(int n){ if(n<=1) return n; if(memo[n]!=0) return memo[n]; return memo[n] = fib2(n-1)+fib2(n-2);...
阅读全文

浙公网安备 33010602011771号