解题报告
文章平均质量分 69
米兰半岛铁盒
米兰半岛铁盒,旨在分享一些程序员感兴趣的东西。
展开
-
HDU 1272 并查集
/* 这个是并查集的题目,要考虑的地方有 1、要保证边的数目比点的数目小1 2、每个测试数据都是已经给出的,这里用mark数组标记了所有给出的数据 3、要考虑只输入0 0的情况 4、当集合数目为1时,才满足条件*/#includeusing namespace std;const int maxn = 100002;int vid[maxn], m原创 2014-07-17 15:07:08 · 329 阅读 · 0 评论 -
HDU 1686 Kmp(字符串匹配)
/* Kmp算法的运用 这里是要统计字符在母串中出现的次数 只要在原来的基础上稍作修改即可*/#include#include#includeusing namespace std;char a[10005], b[1000005];int next[10005];void Getnext(char* t)//构造next数组,这是关键{ int原创 2014-07-27 17:00:31 · 435 阅读 · 0 评论 -
HDU 2054
HDU 2054 A==B?原创 2014-08-03 13:54:23 · 522 阅读 · 0 评论 -
HDU 1010 搜索
//迷宫问题: HDU 1010//http://acm.hdu.edu.cn/showproblem.php?pid=1010#include#includeusing namespace std;int dx,dy,sx,sy,n,m,t,flag;char a[8][8];//用来保存地图int st[4][2]={{1,0},{-1,0},{0,-1},{0,1}};//用来原创 2014-07-12 15:29:02 · 505 阅读 · 0 评论 -
HDU 1754 线段树
//线段树 HUD 1754//http://acm.hdu.edu.cn/showproblem.php?pid=1754#include#include#include#includeusing namespace std;const int Maxn = 200002;typedef struct //结构体用来建立数线段树,保存左右叶子以及区间的最大值{ int原创 2014-07-12 15:29:03 · 425 阅读 · 0 评论 -
POJ 1163 DP 动态规划
POJ 1163:The Triangle原创 2014-08-04 16:01:43 · 407 阅读 · 0 评论 -
HDU 1711
HDU 1711:Number Sequence原创 2014-08-04 14:46:30 · 488 阅读 · 0 评论 -
HDU 1823 二维线段树
原题链接:原创 2014-07-30 15:58:18 · 682 阅读 · 0 评论 -
HDU 2066 最短路
/* 这个题目只要看成是草儿所在的城市到各点的单源最短路径就可以了 所以把草儿所在的城市标记为0 但要注意的是和草儿邻近的城市不需要坐火车的,所以花费的时间为0 只要用Dijkstra算法就可以了*/#includeusing namespace std;const int maxn = 1000000;int f[1002][1002], ct[1002原创 2014-07-14 20:34:39 · 358 阅读 · 0 评论 -
HDU 3790 最短路
/* 这个题目要注意的是当路径相同时要取费用最少的哪一条 其它的只要按照最短路的常规用法即可*/#includeusing namespace std;const int maxn = 1000000;int n, m, d[1002][1002], p[1002][1002], dis[1002], pis[1002];bool vis[1002];void Di原创 2014-07-15 11:06:44 · 375 阅读 · 0 评论 -
HDU 1232 并查集
/* 这题要用到的算法是并查集 将能够连接的城镇看成是一个集合 然后统计出所有集合的个数 根据n个点能连成通路的规则可知还需要建设的道路为sum-1条*/#includeusing namespace std;int b[1002];int find_(int t)//找到点t所在的集合{ if(b[t] != t) b[t]原创 2014-07-15 15:51:38 · 363 阅读 · 0 评论 -
HUD 1241 搜索 三维深搜
/* 这个题目主要是找到某个油井'@',然后用DFS函数对其上下左右以及和其对角线上的 点进行搜索,把其周围的油井标记为非油井'*' ,直到其周围所有的点都被访问了 之后就返回到主函数中,表示一个油井泵。 */#include#includeusing namespace std;char st[102][102];int s[8][2] = {{1,0},{-1,0},{-1,原创 2014-07-14 15:00:07 · 438 阅读 · 0 评论 -
HDU 2063 二分匹配(匈牙利算法)
/* 这个题目求的是最小匹配数,所以只要用匈牙利算法就可以了 但代码的方式和1151有点儿不一样,详情如下*/#include#include#includeusing namespace std;const int N = 505;int map_[N][N], vis[N], flag[N];int k, n, m;bool Search(int x){原创 2014-07-27 12:35:14 · 376 阅读 · 0 评论 -
HDU 1166 树状数组
#include#include#define lowbit(x) (x&(-x))//计算a^k,这是做神奇的地方 const int N = 50005;int a[N], n;void Add(int x, int y)//将每个结点的值都加上,当然也可以修改某个结点的值 { while(x <= n) { a[x] += y; x += lowbit(x);//跳原创 2014-07-27 15:50:53 · 321 阅读 · 0 评论 -
HDU 1195 深搜
/* 这个题目可以用深度优先搜索(DFS)做 搜索的目的就是让每一位密码进行移动 直到移动到可以使用最少的动作得到能打开箱子的密码为止*/#include#includeusing namespace std;int a[4], b[4], v[4] = {0}, sum;int cup(int num){ int t = 0,s[4] = {num原创 2014-07-17 13:10:26 · 469 阅读 · 0 评论 -
HDU 1875 Prim+并查集
/* 这个题目同时用到了并查集和最小生成树 用并查集判断所有点是否符合条件 在利用最短路计算最小价值*/#include#include#includeusing namespace std;const int Maxn = 1000000;const int maxn = 105;double dis[maxn][maxn], cost[maxn], d原创 2014-07-16 17:14:03 · 407 阅读 · 0 评论 -
HDU 1850 博弈
/* 这是尼姆博弈题 要让先手赢的话,先手从第i堆牌中取出x张牌后 剩下的n-1堆异或的结果和第i剩下的异或为0,那先手一定能赢 那么只有当第i堆牌数大于剩下n-1堆牌的异或结果时,先手一定赢*/#includeusing namespace std;int main(){ int n, card[102]; while(cin >> n原创 2014-07-17 18:46:32 · 356 阅读 · 0 评论 -
HDU 2191 部分背包
/* 这是部分背包问题,也是通过01背包转化过来的 最重要的是处理好后面那个大米的袋数*/#include#include#include#include#include#include#include#define INF 0xfffffffusing namespace std;int p[102], h[102], c[102], a[10002];i原创 2014-07-20 16:59:10 · 432 阅读 · 0 评论 -
HDU 2149 巴什博弈
/* 巴什博弈 m%(n+1)!=0就是必胜状态*/#include#includeusing namespace std;int main(){ int n, m; while(scanf("%d%d",&m,&n) != EOF) { if(m%(n+1) == 0) { cout <<原创 2014-07-18 12:25:03 · 372 阅读 · 0 评论 -
HDU 2516 斐波那契博弈
这题是斐波那契博弈(Fibonacci Nim)详情戳这个链接: http://blog.csdn.net/dgq8211/article/details/7602807原创 2014-07-17 21:01:34 · 447 阅读 · 0 评论 -
HDU 2955 01背包
/* 这道题是01背包问题,但要进行转换 把列出来的总钱数作为总的重量。把逃跑成功的概率作为价值 只有当逃跑成功的概率大于预算逃跑成功的概率,这时候能抢的钱总数就是最多的 这里的vauel[0]=1也要初始化为1*/#include#include#include#include#include#include#include#define INF原创 2014-07-20 15:42:45 · 524 阅读 · 0 评论 -
HDU 2176 尼姆博弈
/* 这是尼姆博弈题 题目要求输出所有第一次取某堆的数量和剩下的数量 如果用常规的方法做的话,肯定会超时 所以我们必须要知道位运算的一个重要的性质,那就是: a^b^c^d=e; d^e=a^b^c*/#includeusing namespace std;int num[200002];int main(){ int m; w原创 2014-07-18 12:16:15 · 412 阅读 · 0 评论 -
HDU 1114 完全背包
/* 完全背包问题 但这题是求最小的值,所以这样把pis数组初始化为无穷大 把pis[0]初始化为0,然后把01背包的状态方程改为 for(i=1;i<=n;i++) for(j=w;j<=f-e;j++) pis[j]=min(pis[j],pis[j]+p);*/#include#include#include#incl原创 2014-07-20 14:07:32 · 404 阅读 · 0 评论 -
HDU 1548 广搜
原题链接/* 广度优先搜索题 到每一层楼都可以上楼和下楼,但要注意的是不能小于1当然也不能大于n 每到一层楼就把层数放在队列里,取出层数后又去掉 然后通过每个层数生成子节点进行搜索*/#include#include#include#include#include#include#include#include#define INF 0xff原创 2014-07-21 16:03:31 · 396 阅读 · 0 评论 -
HDU 1372 棋盘广搜
#include #include using namespace std;int sx,sy,ex,ey;int dist[8][8]; //dis[i][j] 到当前点(i,j)所花的最少步数int step[8][2]={{-1,2},{-1,-2},{1,2},{1,-2}, {2,1},{2,-1},{-2,1},{-2,-1}};原创 2014-07-21 18:53:44 · 413 阅读 · 0 评论 -
HDU 1151 二分匹配(匈牙利算法)
/* 二分匹配(匈牙利算法) 根据:DAG图的最小路径覆盖数=节点数(n)- 最大匹配数(m) 先用匈牙利算法求出最大匹配数,再用它减去节点数就可以了*/#include#includeusing namespace std;const int N = 125;int map_[N][N], vis1[N], vis2[N], flag[N];int n, m原创 2014-07-26 18:50:10 · 402 阅读 · 0 评论 -
HDU 1856 并查集
/* 并查集 这个题目要注意的是如何记录每个集合的元素个数 只要通过建立每个集合的基结点 然后要用基结点bon[i]来记录元素个数*/#includeusing namespace std;int bin[10000002], bon[10000002];int find_(int t){ if(bin[t] != t) bin原创 2014-07-15 18:40:26 · 413 阅读 · 0 评论