- 博客(6)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 HDU 4529 郑厂长系列故事——N骑士问题(dp,状态压缩)
这道题相当于是poj的炮兵阵地问题的变形。基本模仿炮兵阵地问题就做出来了。 将棋盘用二进制形式保存在数组中,有皇后的地方保存为1,其余为0。 刚开始做的时候一直是第一组数据正确的,第二组数据差了几十,然后以为是哪里没有限制好。后来只测试第二组数据的时候竟然是对的。感觉到可能是哪里数组没有初始化。后来把保存棋盘的数组初始化了就对了。也给了以后做题的一个小经验,测试数据的时候,刚开始最好把样例一组
2014-01-26 06:49:42 1270
原创 poj1185 炮兵阵地 (DP状态压缩)
第一次接触状态压缩的动态规划,参考了别人的博客。开始写的时候一直找不到哪里错了,总觉得自己跟别人除了变量名不一样其他的都一样。后来把map数组全部输出来以后发现原来读map数组的时候就读错了,开始用的scanf,后来发现原来scanf 会把空格一起读进去,就导致了错误。将scanf改成cin以后就过了。 方法是将地图中的每种状态用二进制进行编码,存在map数组中,编码以后原本需要用二位数组才能存
2014-01-24 17:05:00 664
原创 UVa 116 - Unidirectional TSP(DP)
题目大意是给一个矩阵,要求从矩阵的最左边走到最右边,使得走过的路径上所有数字的加和最小。 方法就是从矩阵的一头找到另一头,使每一列上面的加和都最小。使用了一个数组dp,dp(i,j)保存的是到达(i,j)这个点的时候最小的值。然后就是考虑是从矩阵的左边向右边寻找答案还是从矩阵的右边向左边寻找答案。最开始想的是从左向右,但是代码写出来以后发现一直wa,想了半天感觉到可能是字典序出问题了。于是只能从
2014-01-21 16:40:24 622
原创 UVaOJ 10003 - Cutting Sticks(dp)
题目大意是要对一段木头按照要求进行切割。切割的成本按照切割木头的长度进行计算。比如切割一段长10的木头就要花费10的钱。给定一段木头的长度,再给出要对木头切割几次,然后输入一串数字,表示从木头的一头数,长度为几的地方要进行切割。要求计算出切割这段木头最低的成本。 声明一个二维数组dp,dp(i,j)表示了从位置i到位置j时切割所需要的最少价值。写出状态转移方程 dp(i,j)=min{dp(i
2014-01-20 13:12:30 660
原创 UVaOJ 674 - Coin Change
这道题也算是一道模板题吧。入门经典上面的硬币问题是要求到达一个特定的数值的最少或者最多的硬币数量,这道题要求的是求出到达一个特定的数值的方法总数。 刚开始想的是用跟入门经典上面一样的方法(假设总数用tot数组保存),声明一个一维数组,然后tot[ i ]=sigma{ tot[ i - val[ t ] ] }后来发现这样做会产生很多重复,比如面值是6的情况,会1,5跟5,1就会重复计数。 那
2014-01-16 08:40:49 706
原创 UVa 10405 - Longest Common Subsequence
一道模板题,但是输入中有陷阱。 不能用cin或者scanf,用gets,因为输入中有空格。 #include #include #include using namespace std; const int maxn=1000+5; int c[maxn][maxn]; void LCS(char* s1,char* s2){ memset(c,0,sizeof(0)); for(in
2014-01-04 16:37:32 636
实验室安全.txt
2019-08-17
Visual C++里面的重复定义
2013-05-31
C++字符串问题,char type[10]跟string type 有什么区别?
2013-05-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人