摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1237题意: 给你一个只有+ - * / 的计算表达式 , 要你求出结果.坑爹: 一开始我只是以为只要在输入的时候遇到*或者/就弹出来进行计算,然后在到最后计算 + 和 - 的时候直接弹出一个一个计算,最后才发现原来在最后弹出来计算的时候要全部反过来,不能直接弹出就计算然后压入.解法: 遇到 * 或者 / 就弹出两个进行计算, 然后压入结果 , 到最后的时候把栈里的数字反过来,也就是用一个数组从0 - n开始存每一个出栈的数字 , 符号栈也是相同的操作 , 然后就可以进行正常的按顺序这样做 + 和 - ... 阅读全文
posted @ 2012-09-15 17:37 pc.... 阅读(277) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1028题意: 给你个数N,要你拆分成很多个数字的和。坑爹: 但不能出现 4 = 3 + 1 和 4 = 1 + 3 这样是算重复的。解法: 每次对一个数N进行 ( 1 - N)的放与不放的试探, 比如说5,不放5的最优解就是在与现在相同负重的时候放了4的解,放5分就等于 f [j-5] + weight 这两种情况加起来就是 5 的最优情况。View Code 1 #include<iostream> 2 using namespace std; 3 4 const int maxn = 120 阅读全文
posted @ 2012-09-13 11:23 pc.... 阅读(196) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2159题意: 给出的n , m , k ,s 分别代表还需n经验升级、还有m耐久度、下面有k组数据、最多能杀s只怪,下面k组的a和b分别代表杀一只这种怪要消耗b耐久度获得a经验,让你计算出在耐久度和杀怪数范围内能不能获得题目给出的经验。坑爹: 一开始我想的时候以为是多重背包的问题,我以为是每种怪都能杀s次,其实是总共只能杀s只怪,所以不能用多重背包做。解法: 二维费用的背包问题,用一个DP的二维数组,DP[ i][ j] i 代表杀怪数 , j 代表耐久度 。因为每个怪可以打多次,所以Pack函数里的循... 阅读全文
posted @ 2012-09-13 11:04 pc.... 阅读(302) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2191题意: 给出大米的价格、重量和袋数,要你计算出在规定的钱数内买最多(重)的米。坑爹: 算是多重背包问题的模版题吧。解法: 多重背包。View Code 1 #include<iostream> 2 using namespace std; 3 4 const int maxn = 20000 + 10; 5 int n; 6 int DP[maxn]; 7 8 int max(int a,int b) 9 {10 return a > b ? a : b;11 }12 13 void. 阅读全文
posted @ 2012-09-12 15:21 pc.... 阅读(179) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1284题意: 给个整数N(分),只能用1分,2分,3分,进行兑换,计算出有多少种兑换方法。坑爹: 简单的完全背包。解法: 当前的兑换方法 f [ j]等于放入某一种钱币和没放入某一种钱币之和,放入某种钱币又分放了多少个,将放了1到最多个的方法加起来就是放入某种钱币之和。View Code 1 #include<iostream> 2 using namespace std; 3 4 const int maxn = 32768 + 10; 5 const int INF = -1 * 0x7fff 阅读全文
posted @ 2012-09-11 21:15 pc.... 阅读(168) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1258题意: 第一个数为sum,第二数N为后面有长度为N的序列(后一项小于等于前一项),要在这个序列中找出一组数加起来等于sum。坑爹: 要输出所有的情况,但不能重复。解法: 用DFS的时候每次按顺序在num数组中找到一个值然后判断有没超过sum,没有的话就把它记录在save数组中,然后再用review记录当前num[ i] 的值,这样的话在DFS完成之后再找下一个值进行试探的时候就要判断是否与review的值相同,相同的话就不用再进行DFS了(序列是严格的后一项小于等于前一项,所有review的值一旦... 阅读全文
posted @ 2012-09-11 13:20 pc.... 阅读(163) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2184题意: 第一行为N,代表下面有N组数据,下面每一行有S和F分别代表一头牛的智商和幽默度(有正有负),现在要你算出要选哪些牛,是求当智商大于0时,幽默度最大的时候的智商与幽默度的总和,总和如果为负的话输出0,正的话直接输出总和的值。坑爹: 因为这相当于01背包的问题了,智商为背包中的体积,幽默度为背包中的价值,但是智商可能为负,访问数组下标的时候会错误。 初始化要将 数组 f 赋值为 -0x3fffffff(其实-200000就够了)并把f[1000000] = 0 因为幽默度能可能出现负数。解法: 要解决数组下标可能会访问到负... 阅读全文
posted @ 2012-09-10 17:15 pc.... 阅读(192) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2647题意: 输入N和M代表N个人和M组数据,M组数据中的A和B代表A的工资要比B的工资高,底薪是(888元),问你这个老板至少要付多少钱给这些员工,A比B工资高就是说A的工资“至少”比B高1元,当拓扑排序出现环的时候输出 -1 ,否则输出老板要给的钱数。坑爹: 用拓扑排序找到入度为0的所有的点都有着同样的工资。 例如:1-2 3-4 这样1和3都为889元,2和4为888元,所以老板所付的总工资为3554元。解法: 在每次调用cut函数的时候都要访问与他相邻的边的点的入度,每访问一次IN[ map[ ... 阅读全文
posted @ 2012-09-10 11:21 pc.... 阅读(197) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3342题意: 输入N,M代表有0~N-1的点,M组数据 ,输入的每组数据代表 a指向b ,然后用这M组数据构成一个有向图,判断这个图有没有环,有就NO,没有就YES。坑爹: 用了vector开的数组,如果中途发现 k == -1 的时候,有很多节点没有删除,所以要在每一次拓扑完之后将map数组清空。解法: 利用拓扑排序,每次找入度为0的点,然后把与他相连的边清除掉,并且将与他相连的点的入度减1。View Code 1 #include<iostream> 2 #include<vector& 阅读全文
posted @ 2012-09-08 11:05 pc.... 阅读(161) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1160题意: 要选出一组序列,求老鼠的体重是递增的,而老鼠的速度是递减的这样的序列长度最长是多少,答案有很多种,输出一种即可。坑爹: 用数组 cd 来记录第i只老鼠前面有多少只是符合条件的,但一开始我是让 j = i - 1 ~ 0 这样找,找到就break,但这样不行,比如说:重量 速度cd数组的值500 50 1100030 21100 90 14000 30 2这样就不对了,是要找到前面能符合条件的最大的cd值。解法: 将num数组(存输入的值)进行排序,根据老鼠的重量进行由小到大排序,利用 数组... 阅读全文
posted @ 2012-09-07 21:13 pc.... 阅读(260) 评论(0) 推荐(0)