[ACM]做题总结

1、有些地方用short代替int可以省内存,对于非负整数使用unsinged来定义

 

2、动态规划(DP)

    1)序列的最大连续和(2479,2593,1050)

     递归式:D[0]=X[0];

                   D[n]=X[n]+max{0,D[n-1]};(D[n]表示以X[n]元素结尾的最大连续和,整个序列的只要求出D[n]的最大值即可)

    2)背包问题(1837,1276)

       无界背包:

       递归式:A(0) = 0

         A(Y) = max { A(Y - 1), max { pj + A(Y - wj) | wj ≤ Y } } 

       0-1背包:

       递归式:A(0, Y) = 0

         A(j, 0) = 0

                   如果wj > Y, A(j, Y) = A(j - 1, Y)

                   如果wj ≤ Y, A(j, Y) = max { A(j - 1, Y), pj + A(j - 1, Y - wj) }

    3)序列最长升序列(1836)

递归式:F[t] = 0(t = 1, 2, ..., len(A))

F[t] =max(1, F[j] + 1)(j = 1, 2, ..., t - 1, 且A[j] < A[t])(以t结尾,即以A[t]为最大值的最长升序列)

 

 

4、输入含有空格的字符串:

用gets()函数。用scanf()也可以,scanf("%[^/n]s",str)。

 

5、scanf和printf函数里面的数据格式一定要严格一致,不然会出现各种意想不到的问题。

 

6、使用STL函数简化代码,提高效率。常用STL函数:

 

1)sort函数、nth_element函数

http://www.cppblog.com/mzty/archive/2005/12/15/1770.html

http://www.51testing.com/?uid-258885-action-viewspace-itemid-131988

http://www.slyar.com/blog/stdlib-qsort.html

 

 

 

你可能感兴趣的:([ACM]做题总结)