- 博客(28)
- 收藏
- 关注
原创 uva 10913 Walking on a Grid
题意:有一个大小有N(最多75)的方格,要你从(1,1)走到(n,n)。有如下规则:你只有三个方向,左、右、下。不能走出方格。一个方格只能走一次。你要保证你的路径上的格子的和最大。你最多只能走k(最多为5)个负权值的格子,从起点到终点。要注意,因为可以向右走,所以定义三维状态可能有问题,所以定义了四维,表示从当前点向左右下走能得到的最大的值。#include #include #i
2011-11-30 19:51:00 1822
原创 uva 10453 Make Palindrome
题意:给你n个串(长度最多为1000),问对于每个串插入最少多少m个字符能使它变成一个回文串。输出m,并把回文串输出.看了解题报告。总结,还要随便用memset,否则会T。#include #include #include using namespace std;const int N=1005;struct node{ int cost,cmd; int x
2011-11-30 16:39:30 1661
原创 uva 10271 Chopsticks
题意:有t组测试数据,要你选出n+8对三元组(从m个数中)。要求这三个数x设map[i][j]是从前j个数中选出i对三元组的最小的代价。可以有如下的状态转移方程:map[i][j]=min(map[i][j-1],map[i-1][j-2]+bad[j]);问题是z如何安排,当我们把数从大到小去排,然后加上限制条件i*3#include #include #include
2011-11-30 11:16:32 2013
原创 uva 10617 Again Palindrome
题意:给你n个串(最长不超过60),问有多少种删去字符的方法使剩下的字符成为一个回文子串。设map[x][y]为从x到y有多少个回文串。当str[x]==str[y]的时候,我们要考虑x+1,y组成的回文串,x,y-1之间的回文串,但是两者都会计算x+1,y-1的回文串数,所以要减去,另外,因为str[x]==str[y],所以x+1,y-1之间的回文串也能和str[x],str[y]组成
2011-11-29 22:38:54 2174
原创 uva 10404 Bachet's Game
题意:给你n个石头,有m种拿石头的方法,问是先手胜,还是后手胜。用一个数组dp[i]表示当前的状态是必胜态还是必败态。设0表示必败,那么dp[0]=0,如果当前状态可能到达一个为0的状态,那么当前这个状态就是必胜态,因为为0的状态只可能是是全部为1的状态推来,即全部是必胜态推出。#include #include #include using namespace std;const
2011-11-29 21:30:14 853
原创 uva 10891 Game of Sum
题意:给你n(最多100)个数,有A,B两个人,两个人都可以从这些数的左右两个边界取数,A先取,如果两个都是按最优策略取,那么最后A的分数比B的多多少.定义状态map[x][y][z]表示从x到y这段石子,z(0或1表示当前A取,或B取)能得到的最多的分数。则状转移成,在x与y这个范围内的值的和减去在x和y在这个范围内z^1能取得的最多的分数,#include #include #
2011-11-29 18:07:34 1345
原创 uva 620 Cellular Structure
题意感觉有点奇怪,直接贴代码了。。#include #include #include using namespace std;const int N=1000;char str[N];int map[N][N];bool vis[N][N];int dp(int,int);int main(){ int t; scanf("%d",&t); whi
2011-11-29 15:30:34 621
原创 uva 10069 Distinct Subsequences
题意:给你t组字符串,要你找出第二个字符串在第一个字符串中有多少个(只要第二个字符串的任意一个字符在第一个字符串中的位置不一样就可以。)起先用int WA了,用long long WA了,后来去看网上代码,自己写了一个大数类。。。奇葩~#include #include #include using namespace std;#define base 1000000000con
2011-11-28 18:31:47 1407
原创 uva 10163 Storage Keepers
题意:有n个仓库(最多100个),m个管理员(最多30个),每个管理员有一个能力值P(接下来的一行有m个数,表示每个管理员的能力值),每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,...),每个月公司都要给看管员工资,雇用的管理员的工资即为他们的能力值p和,问,使每个仓库的安全值最高的前提下,使的工资总和最小。输出最大安全值,并且输
2011-11-27 19:24:11 1130
原创 uva 10817 Headmaster's Headache
题意:有一个学校想要聘请老师,要求每个学科都有两个以上的老师授课,并且要使总费用最小。有S(最多8个)个学科,现任的M(最多20个)个老师(你必须继续聘请他们),N(最多100个)份申请。后来的M行每行有至少两个整数,表示现任的老师的工资,和他所教授的课程(可能不止一个)。再后来的N行每行有也有至少两个整数表示聘请这个老师所需的费用,以及他所教授的课程(可能不止一个)。三个0表示输入结束。
2011-11-27 15:22:58 944
原创 uva 10599 Robots(II)
题意:给你一个n*m的矩阵,然后给你k个坐标(以0,0结束)表示上面有物品,然后有一个机器人只能往右走和往下走,起点在左上角,终点在右下角,问你,机器从起点到终点最多能拿起多少个物品。前面要输出有多少种路径,并给出其中一种路径(用物品的坐标表示),我们可以抽象成有多少个非降子序列我的思路是:求最长上升子序列的时候,用一个矩阵表示,当我们要放入一个物品时候,我们先从当前已经得到的最长的上升子序列
2011-11-26 00:41:53 993
原创 uva 11258 String Partition
题意:给你t组测试数据,每组数据由一串不超过200个字符的字符串构成,问把它们分成不超过int类型的数,组合起来最大是多少?#include #include #include using namespace std;#define LL long longconst int N=205;const LL limit=((LL)1<<31)-1;char str[N];LL m
2011-11-26 00:34:02 1139
原创 uva 10723 Cyborg Genes
题意:有t组测试数据,每组测试数据有两个DNA,目标串为能保持两个给出的DNA的相对序列且为最小长度的串,并且要输出有多少种构造方法。第一值可以通过求两个字符串的最长公共子序列,然后把两个字符串的长度加起来减去就可以了。重要的是第二值,当我们用DP去求时, 要注意终点。设当前状态两个字符串的剩下长度分别为x,y.而目标序列剩下的长度为len,如果当x==0||y==0,也就是说两个字符串中
2011-11-26 00:04:10 1247
原创 uva 11008 Antimatter Ray Clearcutting
题意:你手中有一激光枪,能使你当前方向上的树全部砍倒。第一行t组测试数据。每一组测试数据,开始由两行构成,分别表示有n棵树,你要砍倒m棵树,接下来的n行给出的是n棵树的坐标(坐标范围是-1000到1000)。问你最少需要几枪才能达到。我的做法是选两个点枚举所有的方向,跪了近三 秒,差点T,不过很可能T,如果RP不好的话。。。#include #include #include usi
2011-11-25 22:52:29 804
原创 uva 10604 Chemical Reaction
题意:有t组测试数据。每组测试数据开始有一个整数n,表示有n种试剂(最多6种)。接下来的n*n行列出来了每种试剂混合产生的化合物以及放出的热量。然后一个整数m,代表有m个试管(最多10个)。接下来一行有m个数,表示m个试管里分别装了哪几种试剂。问怎么组合能产生最少的热量。测试样例之间用/分开,结果用.表示定义了六维的状态直接跑。。。#include #include #
2011-11-25 09:42:14 2009 3
原创 uva 607 Scheduling Lectures
题意:有n个主题。每堂课的时间是L。每个主题各要求t1,t2,...tn(11.每个主题必须完整地包含在一堂课里。不能分成两部分教。2.主题之间的顺序不能调换,即主题i必须在主题i+1之前教。同时,如果在每堂课的最后如果能留有10分钟以内的时候,那么学生的不满意程序是最小的。不满意程度的计算如下所示:D=0(如果剩下的时间是0)。D=-c(如果剩下的时间在10分钟以内)。D
2011-11-25 08:59:48 1286
原创 uva 10118 Free Candies
题意:有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走多少对糖果。糖果种类最多20种.定义了四维的状态去跑。当然也可以定义五维的状态去跑#include #include #include using namespace std;con
2011-11-24 17:06:41 1604
原创 uva 10626 Buying Coke
题意:题意:有t组测试数据。每组测试数据有4个数据,分别表示要买几瓶可乐,分别有多少个价值为1,5,10的硬币。每瓶可乐价值为8。问最少需要给自动贩卖机投多少枚硬币。注意,投入硬币后,自动贩卖机会用最少的硬币数给你多的钱。如果我们开四维的数组,是开不下的,考虑到买了一听可乐之后,价值总是下降的(虽然它的硬币组合是不同的),所以这个状态可以不用记录,只用来判断什么时候结束。注意有一个转移,如果投
2011-11-24 16:23:47 1373
原创 uva 662 Fast Food
题意:有n家餐馆,有m个仓库,然后后来有n个数字,代表了每个餐馆的坐标,0,0表示结束。求餐馆到离它最近仓库的距离和最小,注意仓库都是建立在餐馆上的。输出的时候,要把每个仓库离它最近的餐馆输出。数据范围是餐馆的数目是200。仓库的数目是30个。如果是x,y之间的餐馆的个数奇数,那么中位数无疑是放仓库的最佳位置,如果是偶数,那么中间两个都可以,因为它们的与到其他餐馆的距离和是相等的。先求出dat
2011-11-24 15:51:49 1145
原创 uva 10564 Paths through the Hourglass
题意:给你一个2*n-1行的沙漏,要你找出有多少条路径上的权值和为s(只能由上一层走向下一层的与它最近的两个位置)。并输出一条字典序最小的路径,注意路径的开头是第一行的下标。然后随后都用向左走L或向右走R表示。定义了三维的数组,表示在x,y位置到达k状态有多少种路径。反向跑这个沙漏,因为这样到最后一行时即可以得到有多少条路径,又可以方便判断起始位置。注意三维的数组要用long long
2011-11-23 21:42:03 1334 2
原创 uva 10635 Prince and Princess
题意:求最长公共上升子序列。n^2的算法会超时。考虑是最长公共子子序列可以看成最长上升序列来做(只不过是以上一个字符给出的大小关系,以前我不知道最长公共子序列时的做法,不过当前我并不知道最长上升子序列的olog(n)做法,所以没有意识到这点。),所以我用map建立了大小关系,然后进行跟一个nlog(n)的最长上升子序列就可以过了。#include #include #inclu
2011-11-23 10:11:14 826
原创 uva 10911 Forming Quiz Teams
题意:给你2*n个点,问它们两两组合,使每对的距离加起来最小。状态压缩。#include #include #include #include using namespace std;#define eps 1e-8#define INF 1000000000000const int N=70000;int n;double map[N];bool vis[N];do
2011-11-23 09:36:36 867
原创 uva 11151 Longest Palindrome
题意:给你n个字符串。问每个字符串能从中得到的最长的回文串的多长(可以不连续)??#include #include #include using namespace std;const int N=1005;char str[N];int map[N][N];bool vis[N][N];int dp(int,int);int main(){ int t;
2011-11-23 09:09:39 787
原创 uva 10401 Injured Queen Problem
题意:受伤的皇后只能攻击它这一列的,和它周围的九个格子,题目给出一个字符串,如果第i个字符是?则表示皇后能放在任意位置,如果不是?则表示它指定了必须放在哪一行。问有几种放法。#include #include #include using namespace std;#define LL long longconst int N=20;bool vis[N][N];int n,f
2011-11-23 08:44:19 1017
原创 uva 10313 Pay the Price
题意:有1到300的价值的硬币,给你一个价值,后面跟着一到两个数字,一个数字a表示你要用a枚或者更少的硬币去凑成这个价值,两个数字a,b表示你用a到b范围内的硬币去凑成这个价值。#include #include using namespace std;const int N=305;#define LL long longLL map[N][N];bool vis[N][N]
2011-11-22 21:12:05 3142
原创 uva 10029 Edit Step Ladders
题意:给你多个字符串,一个字符串和另一个字符串如果可以通过改变一个字母,删除一个字母,增加一个字母,那么称这两个字符串之间存在一个阶梯,问最多有多少个阶梯。是一个最长上升子序列类似的问题,但是如果我们直接去跑,是会超时的,因为在得到一个状态的最大值的时候,我们都要判断近乎25000个单词,但实际上,并没有那么多个单词会与当前单词存在一个阶梯,所以我们通过当前这个单词能变成成什么单词,来找出相应
2011-11-22 18:00:34 1215
原创 uva 10201 Adventures in Moving - Part IV
题意:有t组测试数据,每组数据的开始表示终点的位置,然后接下来有若干对数x,y,x表示沿途的加油的位置,y表示每升油的价格。每组数据间有一个空行。开始的时候在位置0,油箱里有100升汽油,问最后到达终点,且油箱里还有100升汽油所需的最小花费是多少。在做这题时候,有两个误区,WA了很多次,一是错认为终点一定在加油站上,二是认为给我们的加油站的位置不会超过终点。但实际上是会超过的,也就是说我们判
2011-11-22 12:58:32 945
原创 uva 10739 String to Palindrome
题意:给你n个字符串。有三种操作:1,添加任何字符到任何位置。2,删除任何字符。3,替换任何字符。问你经过最少多少次操作,能把给出的字符串变成一个回文串。定义dp(x,y)为把字符串从x到y变成回文串经过的最少的操作。则如果str[x]==str[y],那么状态转移成dp(x+1,y-1);如果str[x]!=str[y],那么就要考虑那三种操作,添加,删除的结果都是一样的,即状态转移
2011-11-21 21:29:58 835 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人