摘要: View Code 1 /* 2 DP: 3 状态转移方程: 4 DP[i][j]记录的是 前 i 个人完成 j 个 A 工作后 还可以 完成多少 B 5 二分: 6 找到可能花费的最小时间 maxtime,和最大时间 mintime 7 midtime=(maxtime+mintime)>>1; 8 9 midtime 就相当于背包容量10 看是否能装下 11 12 */ 13 #include<iostream>14 #include<cstdio>15 #include<cstring>16 using namespace std;17 1 阅读全文
posted @ 2012-05-11 21:13 知行执行 阅读(236) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 简单的 BFS 相当于三维迷宫 3 4 */ 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<queue> 9 using namespace std; 10 11 const int size = 55; 12 13 int map[size][size][size]; 14 struct node 15 { 16 int x,y,z; 17 int step; 18 }sta[size*size*size]; 19 阅读全文
posted @ 2012-05-11 16:38 知行执行 阅读(139) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 思路: 3 枚举 + 贪心 4 首先枚举只在前 i 个Lake钓鱼(1<=i<=n) 5 因为每段路上只走一次 那么总时间减去 从第一个Lake到第 i 个Lake 6 路上所花的时间 ,剩下的时间就是钓鱼所用的时间(这样就可以这样处理: 7 从一个Lake可以立即到另一个Lake)这就可以利用贪心 每次在 期待鱼最多的 8 Lake中钓鱼了 9 */ 10 #include<iostream>11 #include<cstdio>12 #include<cstring>13 using namespace st 阅读全文
posted @ 2012-05-11 15:43 知行执行 阅读(147) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 思路: 3 dijkstra变形 4 因为有等级限制 5 我们就假设 第 i 个人参加交易 以他的等级为最大等级 6 把不符合等级要求的人的 flag[i]=true(相当于这个人不参与交易 也即不在这个最短路图中) 7 这就把所有可以参加交易的人留了下来 8 price[i][j]存放的是 在有物品 i 的 情况下 的到物品 j 的优惠价格(相当于边的权值) 9 10 在应用 dijkstra时有点变形11 此时没有明确的起点 d[i] 的初值就是 直接买 这个物品的价格 12 */13 #include<iostream>14 #include 阅读全文
posted @ 2012-05-11 10:22 知行执行 阅读(248) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 最短路 + 0-1背包 3 先用 DIJ 求出 起点到各个点的最短距离 相当于 4 各个物品的体积,各个点的宝物数 相当于 价值 5 总粮食相当于 背包容量 6 剩下的就是 纯粹的 0-1背包问题了 7 */ 8 #include<iostream> 9 #include<cstdio> 10 #include<cstring> 11 #include<algorithm> 12 using namespace std; 13 14 const int size = 110; 15 const int inf = 阅读全文
posted @ 2012-05-10 20:14 知行执行 阅读(147) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 1.先用并差集判断图是否连通 3 2.判断是否存在欧拉路或欧拉回路 4 3.DFS求欧拉路径 5 */ 6 #include<iostream> 7 #include<cstdio> 8 #include<cstring> 9 #include<algorithm> 10 using namespace std; 11 12 const int size = 1005; 13 14 struct nodedge 15 { 16 int e;//单词的最后一个字母 对应的数字 相当于:路径的末端 17 int id 阅读全文
posted @ 2012-05-10 16:39 知行执行 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 给你一个图最少添加几条边能使他任意两点可达:有向图(连通图) 找出入度为零的顶点的个数 m 找出出度为零的顶点的个数 n 则需要添加的边数为:max(m,n);例题:NYOJ 120猜测:强连通缩点可以用来求有几个环以下是NYOJ 120题用强连通缩点做的,改变后用来求环:View Code 1 /*可以用来求环数*/ 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 #define MA 110 7 8 int M,num,head 阅读全文
posted @ 2012-05-09 22:28 知行执行 阅读(305) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 题外话: 3 没想到这是一道最短路题 4 原来最短路可以这样变形,有时也可以多次利用最短路 5 求一个问题 6 思路: 7 我们从每个有藏宝的地方为起点 求到各个点的可以的最大 8 重量 9 10 我们相当于求出了从出口 到 一个藏宝点 所 11 允许的最大重量 12 13 把所有藏宝点的按重量 排序(从小到大) 14 先到最小的藏宝点带上 宝物 再去次大 15 一次类推 16 */ 17 #include<iostream> 18 #include<cstdio> 19 #include<cstring> 20 #incl 阅读全文
posted @ 2012-05-08 21:12 知行执行 阅读(196) 评论(0) 推荐(1) 编辑
摘要: View Code 1 /* 2 题外话: 3 这道题看了好久开始以为是动态规划, 4 但怎么也看不出怎么做。 5 今看别人的代码发现竟如此简短! 6 而且还是 DFS 原来这是一道深搜题 7 而且还用到了 二分查找 8 思路: 9 先得到 可能的最小差值:是 first = map[n][n]-map[1][1];10 可能的最大差值是 last = 120(题中给的最大值)11 取中间值 mid =(first + last)/2;12 然后寻找 是否存在一条 最小差值是 mid 的路径13 最在则 说明 可能最在比 mid 更小差值的路径14 修改 last = mid;... 阅读全文
posted @ 2012-05-07 21:51 知行执行 阅读(267) 评论(0) 推荐(0) 编辑
摘要: View Code 1 /* 2 思路: 3 利用最短路的变形 4 分别从起点搜一次 5 从终点搜一次 6 从起点搜出从起点到达各点的最小值 7 从终点搜出从终点到达各点的最大值(所有可以到达的点) 8 9 主要思想是: 10 从 1 到 i 再从 i 到 n 11 从 1 到 i 时 路径是正着存的 12 13 从i 到 n 时我们把路径反着存一次 14 变成求 从 n 到 i 了(此处最重要) 15 */ 16 #include<iostream> 17 #include<cstdio> 18 #include<cstring> 19 #inclu... 阅读全文
posted @ 2012-05-07 19:06 知行执行 阅读(198) 评论(0) 推荐(1) 编辑