08 2012 档案

摘要:首先看看南阳理工17题:单调递增最长子序列时间限制:3000ms | 内存限制:65535KB难度:4描述求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4输入第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入3aaaababcabklmncdefg样例输出137#include<stdio.h>#include<string.h>int main(){ int i,j,n,m,b[10010],t; char a[1 阅读全文
posted @ 2012-08-25 16:37 萧凡客 阅读(692) 评论(0) 推荐(0) 编辑
摘要:1.先来分析一维的:#include<stdio.h>int main(){ int t,m,n,sum,maxSum; scanf("%d",&m); while(m--) { scanf("%d%d",&n,&sum); maxSum=sum; while(--n) { scanf("%d",&t); if(sum<0) sum=t; else sum+=t; if(maxSum<sum) maxSum=sum; ... 阅读全文
posted @ 2012-08-24 18:41 萧凡客 阅读(1211) 评论(0) 推荐(0) 编辑
摘要:街区最短路径问题时间限制:3000 ms | 内存限制:65535 KB难度:4描述一个街区有很多住户,街区的街道只能为东西、南北两种方向。住户只可以沿着街道行走。各个街道之间的间隔相等。用(x,y)来表示住户坐在的街区。例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。现在要建一个邮局,使得各个住户到邮局的距离之和最少。求现在这个邮局应该建在那个地方使得所有住户距离之和最小;输入第一行一个整数n<20,表示有n组测试数据,下面是n组数据;每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0<x,y<100,表示某个用户所在街区 阅读全文
posted @ 2012-08-23 15:38 萧凡客 阅读(1377) 评论(1) 推荐(0) 编辑
摘要:1017:装箱问题时间限制:1000ms内存限制:65536kB描述一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。输入输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。输出除 阅读全文
posted @ 2012-08-23 13:06 萧凡客 阅读(417) 评论(0) 推荐(0) 编辑
摘要:以北大的1979为例:Red and BlackTime Limit: 1000MSMemory Limit: 30000KTotal Submissions: 17144Accepted: 9025DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. 阅读全文
posted @ 2012-08-22 19:08 萧凡客 阅读(2206) 评论(0) 推荐(1) 编辑
摘要:二维背包问题一 问题描述: 二维费用的背包问题是指: 对于每件物品,具有两种不同的费用; 选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。 问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2, 第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。 f[i][u][v] = max(f[i-1][u][v] , w[i] + f[i-1][u-a[i]][v-b[i]]) 二 加深 同样的解决二维费用背包的只需要增加一维数组即可,即建立f[u][v]数组 当为完全背包时候, 阅读全文
posted @ 2012-08-22 18:11 萧凡客 阅读(6406) 评论(0) 推荐(0) 编辑
摘要://0 1背包#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){ int i,j,n,v,f[1100],w[1100],p[1100]; scanf("%d",&t); while(t--) { memset(f,0,sizeof(f)); scanf("%d%d",&n,&v); for(i=0;i<n;i++) scanf("%d",&p[ 阅读全文
posted @ 2012-08-22 16:24 萧凡客 阅读(804) 评论(0) 推荐(0) 编辑
摘要:北大:3767I Wanna Go HomeTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 2523Accepted: 1049Description 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define maxint 999999 5 int c[610][610],dist[610],p[610]; 6 void dj(int n) 7 { 8 int i,j,temp,u,s[610]; 9 for 阅读全文
posted @ 2012-08-22 08:37 萧凡客 阅读(306) 评论(0) 推荐(0) 编辑
摘要:1 #include<stdio.h> 2 #include<string.h> 3 4 const int max=120;//字符串大小 5 char x[max],y[max]; 6 int b[max][max]; 7 int c[max][max]; 8 int m,n; 9 10 void printstring(int i,int j)//打印最长字串11 {12 if(i==0||j==0) return;13 if(b[i][j]==1) 14 {15 printstring(i-1,j-1);16 printf("... 阅读全文
posted @ 2012-08-22 08:05 萧凡客 阅读(1678) 评论(0) 推荐(1) 编辑