随笔分类 -  DP

好久没有刷题,DP重新开始
POJ 1836 双边最长上升子序列
摘要:马草AC了简直是各种爽啊,而且算法里只用了两次LIS,算法整体复杂度O(nlogn)真的是应了老乔那句至简至繁至简,思考了一整天,还是直接用两次LIS外加两个辅助数组就解决了问题思路就是,要真的深入地思考清楚这个问题,真的深入理解了LIS而不仅仅是套模板,套模板的结果就是把复杂度弄成O(n^2log... 阅读全文

posted @ 2014-06-12 10:00 码农之上~ 阅读(260) 评论(0) 推荐(0)

POJ 3267
摘要:dp经典关于这道题,我看了网上大量的资料,发现整体思路是对的,但是细节解释是错的(或者说不到位)Len = strlen(say); say是牛说的话,下面的word代表单词列表dp[i]表示从say中第i个字符开始,到第Len-1个字符(结尾处)这段区间所删除的字符数,初始化为dp[i]=len-... 阅读全文

posted @ 2014-06-11 04:49 码农之上~ 阅读(337) 评论(0) 推荐(0)

HDU 1081 二维DP裸题
摘要:第一次做二维DP,1A思路是状态压缩+枚举,压缩的方法是将第p至第q行的元素加和,然后求最大子序列和,就能得出这一情况下的最大子矩阵然后用两层循环按行去枚举矩形,就能得出结果了。求最大子序列和的时候要注意,子序列和并非一定>=0上代码 1 #include 2 #include 3 #include 4 using namespace std; 5 6 #include 7 #include 8 9 #define range 11010 int a[range][range];11 int b[range];12 13 int main()14 {15 int n;16 ... 阅读全文

posted @ 2014-04-03 16:03 码农之上~ 阅读(194) 评论(0) 推荐(0)

HDU 1231 HDU 2084
摘要:先发两道水题,完全是凭着N多个月前积攒的经验写的,还有校赛的那道DP,我觉得出的蛮好~HDU 1231最大子序列和,需要标记子序列开始和结束的位置 1 #include 2 #include 3 #include 4 using namespace std; 5 6 #include 7 #include 8 9 #define range 1001010 11 int a[range];12 13 int main()14 {15 int k;16 while(scanf("%d", &k) != EOF && k!=0)17 {18 int f. 阅读全文

posted @ 2014-04-02 19:44 码农之上~ 阅读(174) 评论(0) 推荐(0)

导航