摘要: http://wikioi.com/problem/1220/最基本经典的DP题目,唯一有点意思的是,自底向上计算会更简洁。另外对这种+方式累计的DP,可以直接把原来的存进去,然后再加,本质是不用在同一步更新,因为没有更复杂的运算,只是叠加而已。#include int dp[101][101];int Max(int x, int y){ return x > y ? x : y;}int main(){ int n; scanf("%d", &n); for (int i = 1; i = 2; i--) { for (int j = 1; j ... 阅读全文
posted @ 2013-10-01 23:29 阿牧遥 阅读(196) 评论(0) 推荐(0)
摘要: 因为搜索所有答案,所有我有了个DFS的方案。但后来一看,超时又错误,因为看错题,求的是所有最短路径的解。public class Solution { private ArrayList> ans = new ArrayList>(); private HashSet visited = new HashSet(); HashSet dict = null; private String start = null; private String end = null; public ArrayList> findLadders(String start, String end 阅读全文
posted @ 2013-10-01 20:20 阿牧遥 阅读(605) 评论(0) 推荐(0)
摘要: 这道题的代码没啥好说的,用了O(n)的空间就是水题了。但可以讲一下思考过程。一开始是想O(1)的空间的,然后想从左往右双指针扫,然后根据出现顺序交换遇到的偶数和奇数。但遇到一个问题:1, 2, 3, 4, 5; 第一次交换完是 1, 3, 2, 4, 5;但再往右扫就会再次碰到2这个偶数,又会和5交换,成为1, 3, 5, 4, 2, 错误!试了一下别的交换方法,也不行。想了想,觉得当出现这种奇数偶数交替出现的情况,单靠这样交换是不行的,因为第一个偶数要出现在所有奇数完了之后的位置。想了另一个角度,一个指针在最左,一个指针在最右。然后两边往中间扫,但这道题又要保持原序,又不行。最后看了别人的做 阅读全文
posted @ 2013-10-01 18:04 阿牧遥 阅读(362) 评论(0) 推荐(0)