摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1117这题理解题意最重要。一张纸,有正反两面,将这张纸对折,则一面又分成了两个半页。将若干张纸这样对折,并将这些纸堆叠起来,可以得到一本小册子。现在就要为这个小册子的每个半页编号。下图是小册子只有一张纸时的情况。#include <iostream>#include <string>using namespace std;const int SHEETS_NUM = 30;class Sheet{public: int frontRight, frontLeft, backL 阅读全文
posted @ 2012-09-04 21:36 peaceful 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1107这题条件较多,模拟过程较复杂,但只要细心些就行。我的代码较长。#include <iostream>#include <vector>using namespace std;const int SIZE = 12;class Disciple{public: //门派 char group[2]; //内力,武力,生命值 int innerVal, physicalVal, healthVal; //坐标 int coor_x, coor_y; //是... 阅读全文
posted @ 2012-09-04 19:48 peaceful 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1083我之前不会最大二分匹配,先用的搜索来做(其实这条思路应该也是对的,因为题目给的时间比较宽),超时,而且感觉无法优化了。后来看了别人的代码,发现原来要用最大二分匹配。貌似解决最大二分匹配有两种途径:1,网络流;2,匈牙利算法。我用的是匈牙利算法。网上有很多关于匈牙利算法的文章,我这里就不再对算法做解释了。有时候被迫地不求甚解,匈牙利算法的证明我就没有仔细研究,只是能实现罢了。#include <iostream>#include <vector>using namespa 阅读全文
posted @ 2012-08-30 21:07 peaceful 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1084不多说了,直接贴代码。#include <algorithm>#include <iostream>#include <vector>using namespace std;class Student{public: //P是解出的题数,T是使用的时间 int P, T; //sid是学生在输入序列中的序号 int sid; //score是学生最后的成绩 int score;};vector<Student> students;//统计解出各题 阅读全文
posted @ 2012-08-30 20:58 peaceful 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082题目大意:有若干个矩阵,输入数据给出其行,列数。再给若干个计算矩阵乘法的顺序,求出以此顺序来计算矩阵乘法所需要进行的乘法次数。如果有两个矩阵不能想成,要报错。我的方法:从左到右处理一个矩阵乘法的计算顺序。若遇到矩阵,则保存进栈。若遇到左括号,不作处理。若遇到右括号,取出栈中前两个矩阵,求它们进行乘法需要的乘法次数。#include <iostream>#include <stack>using namespace std;const int MATRIX_LEN = 3 阅读全文
posted @ 2012-08-24 22:17 peaceful 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1070要注意的点:小于等于199ml的牛奶不买。牛奶的有效容量小于等于1000ml。因为作者只喝5天内(包括第五天前的)的牛奶,每天喝200ml。牛奶多的部分丢掉。牛奶的“价格容量比”相等时,购买实际容量最大的。#include <algorithm>#include <iostream>#include <string>#include <vector>using namespace std;class Milk{public: string bra 阅读全文
posted @ 2012-08-24 20:23 peaceful 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1063输入数据中可能有小数点,也可能没有。题目的讨论板里面有人给出了比较特殊的测试数据。代码写的比较乱…#include <iostream>using namespace std;const int LEN = 130;int ans[LEN];void doMultiply(int base){ for (int i = 0;i < LEN;i ++) ans[i] *= base; for (int i = 0;i < LEN;i ++) { an... 阅读全文
posted @ 2012-08-23 22:22 peaceful 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050首先要注意,对门的两个房间不能同时移桌子。我们读入房间号时,要对房间号做处理(比如令房间号=(房间号-1)/2),使得对门的两个房间的编号相同,方便处理。其次,本题我给出两种解法。解法一的思想是,将一次从from->to的移动看成一个线段,n次移动可以看成n条线段。将这n条线段画在数轴上,则最少需要移动的次数,等于线段重叠(两条线段至少包含相同的一点算作重合)的最大层数。这种解法似乎没有包含典型的贪心思想,至少我的愚见是这样。这种解法可以用数学归纳法证明。解法二的思想是,先对所有移动(f 阅读全文
posted @ 2012-08-22 22:59 peaceful 阅读(588) 评论(1) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1057这题首先考查理解题意,我把要点总结一下。有20*20的菌落(即总共有400个格子的菌落),每个小格内菌落的数量用0~3四个等级描述。假设K为某个菌落,及其上下左右四个菌落的数量之和。每过一天,每个格子内的菌落的数量的变化等于DNA[K]。每个格子内的菌落的数量永远在0~3之间。#include <algorithm>#include <iostream>using namespace std;const int SIZE = 20;const int DNALEN = 阅读全文
posted @ 2012-08-22 22:06 peaceful 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1048题目虽然说"START"和"END"间是"asingle line",但是这一行还是会包含换行的。每次读入一行进行处理。一、用getline函数。getline的函数原型是:istream& getline ( istream &is , string &str , char delim );istream& getline ( istream& , string& );功能:将输入流i 阅读全文
posted @ 2012-08-21 19:58 peaceful 阅读(446) 评论(0) 推荐(0) 编辑