摘要:
LIS裸题, 是严格递增的不是 不下降子序列(一开始看错了WA了好几次)O(n*n)#include <stdio.h>#include <string.h>#define N 10100int a[N];int n;void LOS(){ int dp[N],i,j,tmp,max; memset(dp,0,sizeof(dp)); dp[1]=1; max=1; for(i=2; i<=n; i++) { for(tmp=0,j=1; j<i; j++) if(a[i]>a[j] && dp[j]>tmp) ... 阅读全文
摘要:
裸题,最大子矩阵和,将二维压缩为一维,以行为准,每次枚举一行的和(从i列到j列的和),再对行进行最大子序列和DP求解,时间复杂度为O(N^3)#include <stdio.h>#include <string.h>#define INF -1000000000#define N 110int a[N][N];int sum[N];int n;void input(){ int i,j; scanf("%d",&n); for(i=1; i<=n; i++) for(j=1; j<=n; j++) scanf("%d&q 阅读全文
摘要:
简单骑士周游问题,BFS,有障碍物,(可能存在无障碍物的情况),起点和终点不会相同,起点终点无障碍物若能从起点出发到终点则输出步数,否者输入不能到达#include <stdio.h>#include <string.h>#include <queue>#define N 70using namespace std;bool g[N][N];int b;int start,end;struct node{ int n,r,c,k;};queue<struct node> q;int BFS(){ int ans,i,k,R[10],C[10],F 阅读全文
摘要:
其实解释POJ 2533 原题最长上升子序列,用O(N*N)算法和o(n*logn)算法分别实现,学校OJ的数据比较弱,就算写成最长不下降子序列也可以通过,但是在POJ上是WA的而题意本身应该是严格递增的o(N*N)#include <stdio.h>#include <string.h>#define N 10010int a[N];int n;void LOS(){ int dp[N],i,j,tmp,max; memset(dp,0,sizeof(dp)); dp[1]=1; max=1; for(i=2; i<=n; i++) { for(t... 阅读全文