摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2546本题要利用一点贪心的思想,买的时候不买最贵的菜,且留下5元买用来买最贵的菜.剩下的就是01背包的问题了.由于刚学背包,对背包额理解不够深刻.所以坑了很久.//View Code 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 const int MAX = 1100; 5 int c[MAX]; 6 int w[MAX]; 7 int f[MAX]; 8 void ZeroOnePack( 阅读全文
posted @ 2012-09-04 20:33 zx雄 阅读(512) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3790注意要求的是最短路径的最小费用有双重权值.1.求最短路径.2.求最短路径所需要的钱数.若有多条最短路径则要找出花钱最少那条.所以要有种松弛. 1 if(map[mid][i].len + dis[mid].len < dis[i].len) 2 { 3 dis[i].len = map[mid][i].len + dis[mid].len; 4 dis[i].money = map[mid][i].money + d... 阅读全文
posted @ 2012-09-04 15:21 zx雄 阅读(587) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 阅读全文
posted @ 2012-09-04 11:57 zx雄 阅读(97) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/tanky_woo/archive/2010/07/31/1789621.html 阅读全文
posted @ 2012-09-04 10:01 zx雄 阅读(155) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1518题意:给出若干条木棒,求用上所有木棒能不能组成一个正方形.输入:第一行输入T,表示有T组数据 然后给出一个n, 表示有n跳木棒 接下来n个数表示木棒长度.输出:能输出yes 不能输出no因为知道木棒的总长度,所以能算出边长.只要遍历每一条边就能,就能找到是否存在解.可以用深搜实现,直接深搜不剪枝会超时.剪枝的方法:对于同一条边,已经搜索过的不需要再搜索.对于同一条边找到第一个位置时进入不需要从0开始重新搜索.而是从他上一层找到的位置开始搜索.因为上一层搜索过的已经是被标记过,无用的.这样能把原本O(.. 阅读全文
posted @ 2012-09-03 09:21 zx雄 阅读(281) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1372题意:求一匹马从1个位置走到一个位置所需要的步数,这匹马是走'日'字型的(类似中国象棋的马)输入:a1 b2 a表示第一行, 1表示第一列以此类推 行的范围为a~h 列的范围为1~8输出:To get from (起点) to (终点) takes(多少步) knight moves.简单的BFS(),连障碍都没有.只要知道马的前进方法就没什么难度.主要问题还是理解题意啊 囧View Code 1 #include "iostream" 2 #include &quo 阅读全文
posted @ 2012-09-02 19:52 zx雄 阅读(268) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4006题意:题目会给出n个数,求第k大的数.输入:第一行输入两个整数n 和 k接下来有n行数据,输入的数据分为两种.输入I 和 一个数字x 表示写入数字x输入Q 表示进行一次询问 询问当前第k大的数是多少并输出这个数.开始使用sort进行排序,提交后会超时.后来改用优先队列.声明一个结构体1 struct Node2 {3 int x;4 friend bool operator < (Node a,Node b)5 {6 return a.x > b.x;7 ... 阅读全文
posted @ 2012-09-02 19:44 zx雄 阅读(1016) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2473题意:输入 M 数字1 数字2 表示数字1和数字2是同一个集合. S 数字1 表示数字1需要从集合中删除.求有几个集合用并查集实现.普通的并查集并不能实现删除的功能.所以需要使用 "代理".为了好理解先用两个数组.5 6M 0 1M 1 2M 1 3S 1M 1 2S 3未进行删除前.进行删除后删除节点并不是真的删除这个节点,而是把要删除的节点更换为另一个节点.以后搜索他也是搜索另一个节点.这样不会破坏并查集的结构又实现了删除.在查找几个集合时要用used数组标记而不是判断 fath 阅读全文
posted @ 2012-09-02 19:37 zx雄 阅读(239) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1180题意:给一幅图,图中有 'S' 'T' '|' '-' '*' '.' 几种符号, '*'表示墙 '.'表示路 'S' 表示 起点. 'T'表示 终点 '|'或者'-' 表示楼梯 楼梯每过一分钟就会改变一次方向(每走一格一分钟),不能停留在楼梯上且经过楼梯不需要时间. 求起点到终点最少需要多少时间.输入:先输入x 阅读全文
posted @ 2012-09-02 13:49 zx雄 阅读(524) 评论(1) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1125题意:要求找到消息传递给所有人,先传递给谁最快并求出传递的时间.赤裸裸的Floyd找任意一点到其他点的最短路径输入:第一行输入一个数字n,表示有n个人. 若n==0表示测试结束. 接下来输入n行数据,每一行开头输入一个m,表示接受这人消息的人的个数. 然后输入m对数据,每对数据表示接收消息的人的号码和所需要时间.输出:输出传递最快的人和传递时间,号码和时间中间有1个空格.View Code 1 #include <iostream> 2 using namespace std; 3 const int MAX = 100 阅读全文
posted @ 2012-08-31 20:28 zx雄 阅读(232) 评论(0) 推荐(0) 编辑