(2015/9/21)
HDOJ 1231 最大连续子序列
求最大连续子序列,并输出子序列首位元素。
(2015/9/22)
HDOJ 3743 Frosh Week
归并排序求逆序对数
HDOJ 4911 tInversion
逆序数的性质:如果一个序列的逆序数大于0,则必定存在两个相邻的数,交换后逆序数减1。
例如序列1 2 3 4 5,若要插入一个数使逆序数大于0,无论插入那里都存在这样相邻的数。
(2015/9/23)
HDOJ 1009 FatMouse' Trade
背包问题,贪心算法
(2015/10/13)
HDOJ 2501 Tiling_easy version:网格长度n每加1,对新增加的2 * 1网格的方法进行分类,即可推导出公式F(n);
HDOJ 2502 月之数:也是要推导出公式F(n)。二进制数的位数每增加1位,增加的最高位必须是1,然后从左往右依次讨论每一位是1或0的情况。
F(n) = F(n - 1) + F(n - 2) + 。。。 + F(1) + 2 ^(n - 1);
2 ^(n - 1)表示最高位的1有几个。
HDOJ 2503 a/b + c/d:求最大公约数,辗转相除法的代码:
int gcd(int a, int b){ if (b == 0) return a; else return gcd(b, a % b);}
HDOJ 2504 又见GCD:以c一定是b的倍数,对c进行枚举。
(2015/10/14)
HDOJ 1228 A + B:C++关联容器map的使用。
HDOJ 1232 畅通工程:实现并查集。此题中有几个连通分量,就还要再修n - 1条路。
并查集参考:
HDOJ 1236 排名:
1)C++,使用结构体作为优先队列的元素。
2)scanf_s读入字符串时,需要指定最大读入长度。
3)字符数组的比较使用strcmp函数。
(2015/10/17)
HDOJ 1230 火星A+B:先读出火星数中的每一位,存放在数组中。反转数组。从个位开始算。反向输出结果数组。
(2015/10/18)
HDOJ 1237 简单ji算器:(ji算只含 +, -, *, / 的非负整数表达式)
1)用数组保存操作数。
2)若读到*,/则进行一次运算。
3)若读到+,则直接将操作数存入数组。
4)若读到-,则对操作数取负后存入数组。
5)最后对数组中剩下的操作数相加。