摘要: 最长上升子序列的时间复杂度为O(n2),此处为500000,上网看了看别人的解题报告,才知道它有两种算法复杂度为O(n*logn)和O(n^2)。前者使用二分查找,后者朴素查找。它的算法大致思路:设置两个a,b数组,a数组存储数据,b数组存储最长不降序序列。此算法关键在于设计二分查找。二分查找关键代码来自http://blog.csdn.net/ice_crazy/article/details/7536332 1 #include 2 int a[500011],dp[500011]; 3 int main() 4 { 5 int n,temp1,temp2,i,k; 6 k... 阅读全文
posted @ 2013-07-13 17:44 zlyblog 阅读(205) 评论(0) 推荐(0)
摘要: http://yxq0620.blog.163.com/blog/static/4449439220101132121273/http://hi.baidu.com/feithor/item/f0d16911ae7036473a176e91 1 #include 2 #include 3 #define M 999999999 4 int a[1000001],b[1000001],dp[1000001]; 5 int Max(int x,int y) 6 { 7 return x>y?x:y; 8 } 9 //b[j]为到当前元素最大和子序列的最大和10 //dp[j]为到当前元素的. 阅读全文
posted @ 2013-07-13 16:31 zlyblog 阅读(258) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1016#include#include#includeint n;int flag[20];int a[45],num[20];void dfs(int x,int y){ int i; num[x]=y; flag[y]=1; if(x==n) { if(a[num[x]+num[1]]==0) { printf("1"); for(i=2;i<=n;i++) printf(" %d",num[i]); printf("\n"); } ... 阅读全文
posted @ 2013-07-13 09:54 zlyblog 阅读(174) 评论(0) 推荐(0)
摘要: 方法:dfs思想:由于本题中规定只有在固定时刻到达目的点才能逃脱,不能提早,更不能延迟,故不能用bfs。可以用dfs找出所有情况,若有可行解,直接返回即可。本题比较郁闷的是,在tzc上将方向数组int dir[4][2]稍微变动两下,就会超时。这也是今后出现TLE时该考虑的重要的一点吧,可以作为经验教训。#include#includechar map[11][11];int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int t;int flag;int n,m;int dx,dy;void dfs(int i,int j,int step){ int x,y 阅读全文
posted @ 2013-07-13 09:16 zlyblog 阅读(207) 评论(0) 推荐(0)