08 2012 档案
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1083我之前不会最大二分匹配,先用的搜索来做(其实这条思路应该也是对的,因为题目给的时间比较宽),超时,而且感觉无法优化了。后来看了别人的代码,发现原来要用最大二分匹配。貌似解决最大二分匹配有两种途径:1,网络流;2,匈牙利算法。我用的是匈牙利算法。网上有很多关于匈牙利算法的文章,我这里就不再对算法做解释了。有时候被迫地不求甚解,匈牙利算法的证明我就没有仔细研究,只是能实现罢了。#include <iostream>#include <vector>using namespa
阅读全文
摘要:题目链接: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;//统计解出各题
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082题目大意:有若干个矩阵,输入数据给出其行,列数。再给若干个计算矩阵乘法的顺序,求出以此顺序来计算矩阵乘法所需要进行的乘法次数。如果有两个矩阵不能想成,要报错。我的方法:从左到右处理一个矩阵乘法的计算顺序。若遇到矩阵,则保存进栈。若遇到左括号,不作处理。若遇到右括号,取出栈中前两个矩阵,求它们进行乘法需要的乘法次数。#include <iostream>#include <stack>using namespace std;const int MATRIX_LEN = 3
阅读全文
摘要:题目链接: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
阅读全文
摘要:题目链接: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...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050首先要注意,对门的两个房间不能同时移桌子。我们读入房间号时,要对房间号做处理(比如令房间号=(房间号-1)/2),使得对门的两个房间的编号相同,方便处理。其次,本题我给出两种解法。解法一的思想是,将一次从from->to的移动看成一个线段,n次移动可以看成n条线段。将这n条线段画在数轴上,则最少需要移动的次数,等于线段重叠(两条线段至少包含相同的一点算作重合)的最大层数。这种解法似乎没有包含典型的贪心思想,至少我的愚见是这样。这种解法可以用数学归纳法证明。解法二的思想是,先对所有移动(f
阅读全文
摘要:题目链接: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 =
阅读全文
摘要:题目链接: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
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1047虽然说这题水,但我也没一次过。第一次没有考虑到一个输入块只包含0的情况。#include <iostream>using namespace std;const int LEN = 200;//图方便,将这些都作为全局变量char aLine[LEN];int oneInput[LEN],res[LEN];//将aLine以逆序转成oneInputvoid toInt(){ int len = strlen(aLine); memset(oneInput,0,sizeof(oneI
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1036我也不知道这题考查什么,感觉就是考细心。1.时间要能正确的读,输出的格式要对。2.结果要四舍五入。说一下四舍五入的方法,刚从别人那里学的。假设a为要舍入的数,res为结果。1.精确到个位。int res = a + 0.5;2.精确到小数点后第k位。double a, res, base;int k;double base = pow(10.0, k * 1.0);res = ((int)(a * base + 0.5)) / base;经简单测试,有效。PS:上面的高亮显示貌似有问题啊,ba
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035稍微有点复杂,但是只要模拟出来应该就能过了。#include <iostream>using namespace std;class node{public: char instruct; int stepId;};const int SIZE = 12;char aLine[SIZE];node map[SIZE][SIZE];void move(int &curRow,int &curCol,char instruct){ switch (instruct) {
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1034把题意模拟出来就可以了,不多说。#include <iostream>using namespace std;const int LEN = 10000;int input[LEN],pass[LEN];int len;int isEnd(){ int pre = input[0]; for (int i = 0;i < len;i ++) { if (input[i] != pre) return 0; pre = inpu...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1031排序。没有给N,M的范围,所以用了vector。不用将所有输入数据存下来,只需计算同一个编号的design的总得分。对总得分排序,题目规定得分时,再按design的编号排序。取前K个design。再对着K个design按编号由大到小排序。#include <algorithm>#include <iostream>#include <vector>using namespace std;class vote{public: int id; double sc
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1017这种题就不说什么了。#include <iostream>using namespace std;inline int isSatisfied(int a,int b,int m){ if ((a * a + b * b + m) % (a * b) == 0) return 1; else return 0;}int main (){ freopen("input.txt","r",stdin); freopen("output.
阅读全文
摘要:纯粹考操作。我用到了<algorithm>中的reverse函数。#include <iostream>#include <algorithm>using namespace std;const int LEN = 1005;char a[LEN],b[LEN],sum[LEN];void Init(){ for (int i = 0;i < LEN;i ++) a[i] = b[i] = sum[i] = 0;}void getSum(){ int len = max(strlen(a),strlen(b)); int i; for (i = 0;i
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1300参考博客链接:http://www.cnblogs.com/XBWer/archive/2012/08/13/2636836.html这题纠结了好久,最后还是看了别人的思路。以下是解题思路。1.假设共有t个级别的珍珠。解可以被描述成(1,2...i),(i+1,i+2...k)...(s,s+1...t)形式,每个括号中的珍珠按该括号中最后一个级别的珍珠的价格购买。这里要注意的是,假设按等级由低到高的顺序,有i,j,k三个级别的珍珠,答案中不可能出现i按k的价格购买,j按j自己的价格购买的情况
阅读全文
摘要:源地址:http://www.cnblogs.com/eoiioe/archive/2008/09/20/1294681.html.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.tar.gz压缩:tar zcvf FileName.tar.gz DirName——————
阅读全文
摘要:昨天把Linux下的tomcat安装了,但是一直不能从localhost:8080中进入“tomcat manager”。后来看了网上的介绍,发现修改/conf/tomcat-users.xml就可以了。需要注意的是:1.将围住role和user定义行的注释去掉。2.添加role(名字在NOTE注释给出),并添加属于该role的user。其实上面两点,在tomcat-users.xml内都有说明。我使用的这个版本,在<tomcat-users>...</tomcat-users>中就有两个NOTE注释:<!--NOTE: By default, no user i
阅读全文
摘要:来源:百度文库1.下载安装直接在终端输入命令:sudo apt-get install apache22.启动 apache终端输入命令:sudo /etc/init.d/apache2,回车后会看到启动成功的信息,如下:Usage: /etc/init.d/apache2 {start|stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}3.测试 apache终端输入:/etc/init.d/apache2 start。启动apache。在浏览器地址栏输入:http://localhost(
阅读全文
摘要:原地址:http://www.cnblogs.com/sungod/archive/2011/03/14/1983134.html1.去Apache 官网(http://tomcat.apache.org/download-60.cgi)下载apache-tomcat-6.0.29.tar.gz文件。版本号根据官网提供而定,以下命令中要对文件名作相应调整。http://archive.apache.org/dist/tomcat/tomcat-6/2.解压并且解包输入命令:tar -zxvf apache-tomcat-6.0.29.tar.gz在目录下有apache-tomcat-6.0.2
阅读全文
摘要:转自:http://www.cnblogs.com/yongtan/archive/2011/09/28/2194599.html一、安装创建安装目录,在/usr/java下建立安装路径,并将文件考到该路径下:# mkdir /usr/java1、jdk-6u11-linux-i586.bin这个是自解压的文件,在linux上安装如下:# chmod 755 jdk-6u11-linux-i586.bin# ./jdk-6u11-linux-i586.bin (注意,这个步骤一定要在jdk-6u11-linux-i586.bin所在目录下)在按提示输入yes后,jdk被解压。出现一行字:Do
阅读全文
摘要:第一次,只用了简单地深搜,超时。于是自然就想到记忆搜索,用了就过啦。ints是一维数组,保存所有数字。segs是一位数组,保存所有数段的长度。ans是二维数组。ans[i][j]保存以第i个数字开始(但第i个数字不一定被取到,只是从第i个数字开始考虑),计算j,j+1...m段数段之和的最大值。本题要求的便是ans[1][1]。ans[i][j]=max{sum+ans[i+segs[j]][j+1],ans[i+1][j]}。max{}中的两个数的区别就在于,是否以第i个数作为第j个数段的起始数字。#include <iostream>using namespace std;co
阅读全文
摘要:这题参考了别人的思路。dist是二维数组。dist[i,j]存放“如果i和j两个restaurants之间只有一个depot,则它们之间(包括i和j)的所有restaurants到这个depot的路径之和的最小值”。ans是二维数组,ans[i,j]存放“为i个restaurants配置j个depots,这i个restaurants到最近的depots的距离之和的最小值”。则DP转移函数为,ans[i,j]=min{ans[k][j-1]+dist[k+1][i]},j-1<=k<=i-1。也就是说,为前k个restaurants配置j-1个depots,为第k+1~第i个rest
阅读全文
摘要:前两天才做了一道记忆搜索题,所以这道题很快就有思路了。如果一个路径,它经过的城市的interesting point之和最大,但是这条路径的终点不是起点,则这条路径不能取。#include <iostream>using namespace std;const int MAX_CITY = 105;int map[MAX_CITY + 1][MAX_CITY + 1];/* 最后一个点是起点 */int ans[MAX_CITY + 1],point[MAX_CITY + 1],nextCity[MAX_CITY + 1];int DFS(int n,int cityNum)/*
阅读全文
摘要:DP公式个人感觉如下ans[m][i]=min(ans[m-1][k]+diff),对每个need[m-1]<=k<=maxNeed。其中,m是大于等于2的月份(1月份的ans直接初始化)。need数组存放某月需要的员工数,maxNeed需要员工数最多的月份的员工数。diff是员工数从(m-1)月的 i 变成这个m月的k所需要支付的差值。这个公式想出来以后,发现题目没有给员工数的最大数量,如果员工数很多,假设为10000,则最大运算量为12*10000*10000,上十亿了。如果是这样肯定是要超时的。其实,后来发现输入数据中每月的员工数量是不超过1000的,这样,最大运算量不超过千
阅读全文
摘要:典型的背包,不多说。#include <iostream>using namespace std;const int MAX_VALUE = 1000 * (1 + 2 + 5);int ans[MAX_VALUE + 1];int main (){ int coins[3],values[3] = {1,2,5}; while (scanf("%d%d%d",&coins[0],&coins[1],&coins[2]) != -1) { if (coins[0] == 0 && coins[1] == 0 &&a
阅读全文
摘要:第一次,只用了普通的深搜,超时。然后去看了别人的代码,发现可以用记忆搜索。用二维数组ans保存从某点出发可以积累到的food的最大数量,用深搜从起点开始处理。一个点的ans值一旦算出,之后就可以直接使用,不用再计算。#include <iostream>using namespace std;const int MAP_SIZE = 105;int n,k;int map[MAP_SIZE][MAP_SIZE],ans[MAP_SIZE][MAP_SIZE];int direction_x[5] = { 0,-1,1,0,0 };/* 上下左右 */int direction_y[
阅读全文
摘要:将一个数拆分成若干个质数的乘积,没什么难度。我的代码中,需要计算x的y次方,之前用math.h中的pow(x,y)来计算,一直通不过,很奇怪。后来自己写了一个计算幂的函数,就过了。我感觉是数字类型不匹配。我的代码中用的几乎都是__int64类型,而pow函数返回的是double类型。#include <algorithm>#include <iostream>#include <cmath>using namespace std;const __int64 LEN = 5842;const __int64 MAX = 2000000000;int cmp(_
阅读全文
摘要:以前做过类似的题目,所以很快就有思路了。首先判断marbles的总价值是否是偶数,如果不是的话,显然不能对半分。如果总价值是偶数,则变成背包问题,判断是否有marbles的组合的价值为总价值的一半。第一次试,循环的上下界设的比较宽,超时了。然后想了一下,觉得可以做一些限制,把这些限制加了以后,就过了。#include <iostream>using namespace std;const int MAX_MARBLE = 20005;int ans[MAX_MARBLE * 6];/* marbles可能达到的最大价值是MAX_MARBLE * 6 */void readMarbl
阅读全文
摘要:今天做一个题目,用到sort()来排序。原来的比较函数式这样的:int cmp (stickClass s1 , stickClass s2){ if (s1.len != s2.len) return s1.len > s2.len; else return s1.weight >= s2.weight;/* >= */}运行时报错了,错误定位在“algorithm.h”里面。基本上能确定是sort()出了问题。我去问同学,同学给我发了一个网址:http://support.microsoft.com/kb/949171这个页面的大致内容是,在VC20...
阅读全文
摘要:本题求最大上升子序列,这个很容易看出来。数据大小是50万,所以不能用O(n^2)的方法来求。因为1000万以上次循环就可能超时。若用二分来解决,时间复杂度为O(nlogn)。代码使用了我认为的最经典的二分形式。#include <iostream>using namespace std;const int MAXCITYNUM = 500005;int poorCity[MAXCITYNUM],ans[MAXCITYNUM];int main (){int caseNum = 1,cityNum; while (scanf("%d",&cityNum)
阅读全文

浙公网安备 33010602011771号