摘要: DP(DAG最长路)题意:给出x轴上的线段的端点坐标,一个线段能覆盖另一个线段(端点不能相同),求出最多的线段覆盖并且从短到长给出路径。转化模型为DAG,求DAG上的最长路并且打印路径,用记忆化搜索实现#include <cstdio>#include <cstring>#define N 550int a[N],b[N],n;bool g[N][N];int dp[N],path[N];void dfs(int i){ if(dp[i]!=-1) return ; dp[i]=1; for(int j=1; j<=n; j++) if(g[i][j]) { .. 阅读全文
posted @ 2013-02-05 12:08 Titanium 阅读(250) 评论(0) 推荐(0) 编辑
摘要: DP(解码)题意:给出一个串的长度n,串只有0,1组成,但是不能有两个相邻的1。按字典序给串排列,最先肯定是0000,接着是0001,依此类推。给一个数字m,输出在长度为n的情况下,第m个排列的串是什么,如果m大于总排列数,输出-1这其实是一个解码的过程,必须用高位到低位解码(从左到右),因为这里要求字典序,字典序的比较水从左到右的由于数据规模固定在串长度44以内,所以我们先dp出所有长度下可能的排列数,编码时也要用每次编码按位编码,判断当前位为0还是为1,就是看填0或1可能产生多少排列数然后和m比较,这个看代码大概都能懂的#include <cstdio>#include < 阅读全文
posted @ 2013-02-05 09:54 Titanium 阅读(540) 评论(3) 推荐(0) 编辑