九度OJ
晃晃--
这个作者很懒,什么都没留下…
展开
-
九度1011 最大连续子序列和
给一序列,求最大连续子序列的和,以及这个序列的开始元素和最后一个元素,若都为负数,和为0,输出原序列第一个和最后一个元素 思路:d【i】存放以第i个元素为结束点的连续序列的和,d【0】=a【0】,顺推(动态规划思想),最后找出d中最大的即可; first【i】存放以第i个元素为结束点时,此序列的开始元素的下标; #include int a[10000],d[10000],fir原创 2013-09-21 18:14:10 · 1111 阅读 · 0 评论 -
九度1014 排名 结构体排序
结构体排序 当分数相同时,按考号(字符串)升序排序 字符串排序时,在cmp函数里,用strcmp( )来比较两字符串大小 strcmp(a, b ) > 0时,a > b strcmp(a, b ) = 0时,a = b strcmp(a, b ) #include #include typedef struct { char id[25]; int s原创 2013-09-21 18:14:08 · 851 阅读 · 0 评论 -
题目1480:最大上升子序列和
不用多说了,老套路 #include int a[1005],d[1005]; int main() { int n,i,j,max; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); d[0]=a[0]; for(i=1;i<n;i++) {原创 2013-09-21 18:13:27 · 1445 阅读 · 0 评论 -
九度1012畅通工程
求需要加几条边可以让图变得连通 求出连通分量个数,需要的边数即连通分量数减一 #include #include int map[1000][1000]; int n,v[1000]; void dfs(int k) { int i,j; v[k]=1; for(i=1;i<=n;i++) if(!v[i]) { if(map[k][i]||map[i][k])原创 2013-09-21 18:12:57 · 1169 阅读 · 0 评论 -
题目1131:合唱队形
求以a[i]为结束结点时的最长上升序列长度,保存在d1[i]中,从前向后更新 再求 a[i]为开始结点时最长下降序列长度,保存在d2[i]中,从后向前更新 #include int a[102],d1[102],d2[102]; int main() { int n,i,j,max; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i+原创 2013-09-21 18:12:24 · 960 阅读 · 0 评论 -
题目1123:采药
方法一原创 2013-09-21 18:10:17 · 837 阅读 · 0 评论 -
九度1009判断两个序列构成的两个二叉排序树是否相同
此程序中,实现用递归构造二叉排序树,以前递归一直构造不成功,仔细看看书,发现是函数传送参数的时候,不能传送指向结点的指针,若这样只能改变此指针指向内容,而无法改变此指针,但是递归构造时,当函数接受的参数为NULL时,要分配空间,把这个新空间的指针值赋给传过来的指针,所以传送参数时要传指针的指针,这样就不仅可以改变指针指向的能容,也能改变这个指针,这样就顺利生成新的结点。 #include #原创 2013-09-21 18:14:39 · 2589 阅读 · 0 评论 -
北大拦截导弹
求最长不升子序列 #include int main() { int a[30],d[30],i,j,max,n; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); d[0]=1; for(i=1;i<n;i++) { d[i原创 2013-09-21 18:11:35 · 823 阅读 · 0 评论 -
九度1008最短路
dijkstra算法实现 #include #define MAX 900000000 typedef struct NODE { int dis; int cost; }node; node map[1005][1005]; node d[1005]; int v[1005]; void init() { int i,j; for(i=0;i<1005;i++)原创 2013-09-21 18:10:51 · 1160 阅读 · 0 评论 -
九度1078 前序和中序建二叉树
九度1078 前序和中序建二叉树原创 2013-09-21 18:15:59 · 1153 阅读 · 0 评论