自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

那些年

在慢慢爬的程序员

  • 博客(69)
  • 资源 (3)
  • 收藏
  • 关注

原创 UVA - 10604 Chemical Reaction

有m种化学药品(m#include #include #include #include using namespace std;const int INF = 1<<30;int m,k,t[12],r[10][10],w[10][10],map[10][10][10][10][10][10];int vis[10][10][10][10][10][10];int dp(

2013-09-29 16:07:33 726

原创 UVA - 607 Scheduling Lectures

题意:给你n个课题,在给你L,C,代表一堂课的时间和一个常数,还有每个课题的时间,要求课题的顺序必须是严格的从小到大就是Ni必须在Ni+1后上,课题必须严格的在一堂课上,同时,如果在每堂课的最后如果能留有10分钟以内的时候,那么学生的不满意程序是最小的。不满意程度的计算如下所示:D=0(如果剩下的时间是0)。D=-c(如果剩下的时间在10分钟以内)。D=(t-10)^2(剩下的情况

2013-09-28 22:47:38 907

原创 UVA - 10118 Free Candies

题意:有4堆糖果,有一个篮子最多只能放五个,从这些糖果任意拿一个放进篮子里,如果篮子里有两个一样的就放进口袋里,求最多放进口袋几种,因为数据不是很大,所以直接用4维的表示,dp[x1][x2][x3][x4]表示当4堆还剩多少的时候最多放进口袋几种,用二进制表示是否在篮子里#include #include #include #include using namespace std;

2013-09-28 21:13:27 1177

原创 UVA - 10626 Buying Coke

题意:给你四个数,分别代表要买的可乐的数量,价格为1,5,10的硬币数量,每瓶可乐价格是8,问买这些可乐最小要的硬币数量,每买一瓶返还的硬币数最少的可能。dp[c][x][y][z]的表示是最容易的,但显然空间占用太大,也容易想到我们可以把第一个参数去掉,至于返还的可能也就5种,2*5,8*1,10*1,5*1+3*1,10*1+1*3,显然为了能够最少我们是从10这种硬币开始的#incl

2013-09-27 20:04:47 700

原创 UVA - 662 Fast Food

题意:有n家餐馆,有m个仓库,然后后来有n个数字,代表了每个餐馆的坐标,0,0表示结束。求餐馆到离它最近仓库的距离和最小,注意仓库都是建立在餐馆上的。输出的时候,要把每个仓库离它最近的餐馆输出。数据范围是餐馆的数目是200。仓库的数目是30个。先用dis[i][j]记录第i个到j的总距离的最小值,dp[i][j]表示在前j个安i的的最小距离,dp[i][j] = min(dp[i][j],dp

2013-09-26 21:18:21 725 2

原创 UVA - 10564 Paths through the Hourglass

题意:在给出的2*N-1的数列中,找到总权值为S的路径,要求输出字典序最小的路径,跟数塔相似,从最后的一行动态规划到第一行,然后找到第一行最左边的开始打印路径,用dp[i][j][k]表示坐标(i,j)权值为k的路径个数#include #include #include #include #include using namespace std;const int INF =

2013-09-26 12:55:01 737

原创 UVA - 10635 Prince and Princess

题意:求最长公共子序列,这题涉及到将LCS转化为LIS,不然会超时,用LIS的o(nlogn)的算法,很容易理解:记录A序列的下标,然后依次填写在B序列对应的数中,然后求LIS#include #include #include #include using namespace std;const int MAXN = 70000;const int INF = 1<<30;

2013-09-25 17:30:43 634

原创 UVA - 10911 Forming Quiz Teams

题意:集合上的动态规划,刘汝佳上书的相似题目,d (s ) 表示是把集合S中的元素两两配对后的最小距离和。d(s)= min { |Pi Pj| + d ( s -  {i} -  {j})};#include #include #include #include using namespace std;const int MAXN = 10;const int INF =

2013-09-25 12:52:52 707

原创 UVA - 11151 Longest Palindrome

题意:以为是求最长回文串,结果用Manacher 一直错,原来题目是求最长回文子串,汗!!那么就很好处理了,跟之前的一样,当str[l]==str[r]的时候,+1,否则在dp(l+1,r),dp(l,r-1)找最大的#include #include #include #include using namespace std;const int MAXN = 1100;

2013-09-24 20:27:49 829

原创 UVA - 10891 Game of Sum

题意:在给出的n个数中,有A,B两个人,A先取(从左或右取一个或多个数),然后B同样如此,两个人都想着取的数的和是最大,并让对方尽量总和最小,当然可能还有剩,如果最后的数非常小的话,求最大的极差,因为A和B最后的总和一定是Sum,是固定的,所以A-B=2*A-Sum,所以我们尽量让A最大,用dp[i][j]表示从i-j最大的是多少,我们要知道的是dp[1][n],至于怎么样尽量大呢,一定是我们每次

2013-09-23 22:29:59 558

原创 UVA - 10401 Injured Queen Problem

题意:给出一个字符串,要求在n*n(n是字符串长度),然后如果str[i-1]=‘?’,那么在第i行就可以随便放,如果1-F的话,就在第i就要放在这个位置,注意的是皇后会攻击它的同一列和它周围的8个,求最多能放几个,仿照八皇后的思想一行一行的放,dp[i][j] 表示在坐标(i,j)能放几种,所以dp[i][j] = dp[i-1][k](k表示可以放的位置也就是abs(k-j) > 1)

2013-09-22 21:15:02 555

原创 UVA - 10313 Pay the Price

题意:在1-300之间,给你n,如果后面没跟着数字,代表用1-n的的种数凑成n,如果有一个数的话代表用1-l1种数凑成n,如果还有l2,代表用种数大于l1,小于l2的数凑成n,这貌似没思路啊,枚举的话好像不是太可能啊,后来看到这题涉及到一个结论ferrers图的性质:数n拆分成k个数的和的拆分数,和数n拆分成最大数为k的拆分数相等,然后就用dp[i][j]代表用大小不超过j的数凑成i的方法个数

2013-09-22 16:45:18 624

原创 UVA - 10453 Make Palindrome

题意:跟之前删除,添加,替换转化成回文串一个意思,还是从后往前枚举,最后根据dp[i+1][j],dp[i][j-1]的大小,我们就可以判断是添加在哪一边了,如果dp[i+1][j]大的话,那么果断是复制s[l]在最右边,因为不相等的话我们肯定要添加一个,当然要找最小的啦,另一种情况就复制s[r]在最左边,打印的时候注意如果有中间的字符的时候要记得打印就行了#include #include

2013-09-21 22:07:00 693

原创 UVA - 10201 Adventures in Moving - Part IV

题意:在100升为初始的车,求到达终点的最小花费,路上有加油站,分别给你离起点的距离和每升油的价格,没升油走一公里,在选与不选做动态规划#include #include #include #include #include using namespace std;const int MAXN = 205;const int INF = 1<<29;int n,dp[MAXN

2013-09-21 00:51:07 731

原创 UVA - 10154 Weights and Measures

题意:有几只乌龟,每只乌龟有一定的重量与力量。每只乌龟可以背小于它力量的重量(包括它自身的重量)。问最多一共可以有多少只乌龟叠在一起。显然力量越大的在下面的话,上面就越能承受越大的重量,所以按力量排序,接下来就有点最长上升子序列的意思了,用dp[i]表示叠i只乌龟的最小重量,越小的话就好这也是显然的,那么我们就可以设sign表示最多有叠几只

2013-09-20 20:41:42 1159

原创 UVA - 11137 Ingenuous Cubrency

题意:完全背包问题版的凑硬币#include #include #include const int MAXN = 10010;long long dp[MAXN];int arr[22],n;void init(){ memset(dp,0,sizeof(dp)); dp[0] = 1; for (int i = 1; i < 22; i++)

2013-09-20 18:48:04 638

原创 UVA - 10617 Again Palindrome

题意:只通过删除,问可以弄成多少的回文串,跟之前的一题是相似的,对于str[i] = str[j]的情况,如果我们步删除的话dp[i][j] = dp[i+1][j-1] +1,如果删除str[i]的话,dp[i][j] += dp[i+1][j],相似的还有dp[i][j] += dp[i][j-1],除去相同的dp[i+1][j-1],#include #include #incl

2013-09-19 10:11:44 524

原创 UVA - 10271 Chopsticks

题意:从n个筷子中选出k+8对(x,y,z)使得总的(x-y)^2最小,切z最大,容易想出dp[i][j]表示前i个筷子中选j对使得权值最小,先确定最终的状态是我们用n个筷子选出k+8组使得权值最小,对于第i个筷子我们有选与不选的情况,当我们选的时候dp[i][j] = dp[i-1][j],选的话那么就是一定要连着i-1这根一起选,所以dp[i][j] = dp[i-2][j-1]+权值,所以

2013-09-18 23:07:25 713

原创 UVA - 10304 Optimal Binary Search Tree

题意:给定一个序列S= (e1, e2, ..., en),将这些序列构成一个二叉搜索树,要求按深度*频率的总权值最小,根节点深度为0,跟矩阵连乘相似,显然这题具有最优子结构,所以我们假设dp[i][j]表示从(i,j)构成的搜索树最小是多少,然后便模仿矩阵连乘的思路,枚举每一个点作为根节点,接着就是确定状态转移方程了,当我们确定k为节点的时候,那么序列(k1,...,k-1)作为左子树的深度加1

2013-09-18 19:14:26 665

原创 UVA - 10739 String to Palindrome

题意:求最少的操作数使得字符串成为回文串,有删,添,替换,添加和删除其实是一样的,所以我们可以认为只有两种方法,那么dp[i][j]代表从i到j是回文串,如果str[i] = str[j],那么dp[i][j] = dp[i+1][j-1],如果进行删除那么dp[i][j] = min(dp[i+1][j],dp[i][j-1])+1,替换的话就是dp[i][j] = dp[i+1][j-1] +

2013-09-18 11:59:03 613

原创 UVA - 10306 e-Coins

题意:给你n个硬币,每个硬币有两个值x,y,求最少的组合使得(x1+x2..)^2 + (y1+y2...)^2 = m^2,令dp[i][j]代表凑出x总和为i,y总和为j的最少组合,然后就是找出最小的满足要求,不知道为什么用memset(dp,INF,sizeof(dp))会出错#include #include #include #include using namespac

2013-09-17 22:39:06 625

原创 UVA - 590 Always on the run

题意:给你n个城市,k天时间,要你第k天到n城,难懂的题意啊,还是看了别人的解释,注意price[j][i][x]代表的是从j到i的第x天的价格,是从第一天就开始循环的,从一个城市到达一个城市默认是一天,状态转移方程倒是不难推。dp[i][j]代表第j天到i城价格最小,那么dp[i][j] = min(dp[i][j],dp[d][j-1]+price[d][i][x]),dp[1][0] = 0

2013-09-17 20:20:10 758

原创 UVA - 10651 Pebble Solitaire

题意:大意是“-oo”可以变成“o--”,"oo-”可以变成“--o”,问最后最少还剩多少,看到只有两种状态的就用位运算比较简单1代表“o”,0代表“-”,模拟一下就出来了#include #include #include #include using namespace std;const int MAXN = 5000;int dp[MAXN];int dps(in

2013-09-16 20:04:10 690

原创 UVA - 10051 Tower of Cubes

题意:一些每个面都有不同颜色的立方体,要求在上面的立方体的底面颜色和它下面的立方体的顶面颜色相同,且重量递增的情况下,求最高能达到多少,并输出从顶至下的顶面颜色,将六个面的情况都保存下来,求最长的上升子序列#include #include #include using namespace std;const int MAXN = 3005;char face[6]

2013-09-16 14:47:37 708

原创 UVA - 10534 Wavio Sequence

题意:给你n个数,定义当前节点向左的最大下降子序列为L1,向右的最大下降子序列为L2,求min(L1,L2)*2 -1的最大值,我们可以分别从前和后求最长上升子序列 ,然后比较就好了,用到了最长上升子序列的O(nlogn)算法,这个算法大概是:我们对一个数组从左往右扫描,建立一个栈,如果当前的a[i]是大于栈顶的数,那么直接压入栈中,否则从栈底找第一个大于等于a[i]的数并代替这个数,这并不会影响

2013-09-16 12:11:04 670

原创 UVA - 10069 Distinct Subsequences

题意:求一个串的子串出现在母串的个数,,i表示子串的长度,j表示母串的长度,当str1[i] != str[j],dp[i][j] = dp[i][j-1],因为如果这两个字符不相等的话,那么就等于子串与长度为j-1的母串的情况,当str1[i] == str[j]。那么dp[i][j] = dp[i][j-1]+dp[i-1][j-1],相等的话,那么就等于与长度为j-1的母串的个数加上dp[i

2013-09-15 11:19:01 605

原创 UVA - 825 Walking on the Safe Side

题意:求从坐标(1,1)到(n,m)的路径数,有些地方是不能走的,输入有点麻烦而已,只能走右或下,所以动态转移方程就很简单了dp[i][j] = dp[i-1][j] + dp[i][j-1]#include #include #include using namespace std;const int MAXN = 1010;char str[MAXN];int n,m,G

2013-09-14 21:51:56 648

原创 UVA - 620 Cellular Structure

题意:唉,只要理解题意就会很简单了,看了别人的题解明白了,思路:所谓的上下文无关文法就是给定几个算术表达式,然后通过一些相关的变化,可以推出另一个表达式。回到题目,由图片可以知道, O = BOA,我们把BOA中的O看做一个表达式,这里O可以看做O = A | OAB | BOA,由此可知:OAB推出的子串 OABAB, OABABAB,....AB的最后两位一定是AB。①同理

2013-09-13 21:32:14 715

原创 UVA - 10404 Bachet's Game

题意:给n个石头,m 种取法,Stan先取,Ollie后取,取到最后一块的获胜,问谁赢了,首先我们想想怎么能让Stan获胜,一定是Ollie取完后,我们可以通过m种取法中的一种使得Stan拿到最后一块,那么我们用dp[i] = 1表示Stan赢,0为输,那么一定有dp[n-arr[i] ] == 0,那么Stan 就赢了,推广到一般的情况是只要dp[i-arr[j]] == 0,那么我们就可以说在

2013-09-13 21:01:54 683

原创 UVA - 437 The Tower of Babylon

题意:输入一些砖头,每种有若干个,如果一块砖的长和宽都小于另一块的长和宽的话,那么这块砖就可以叠在另一块的上面,每块砖头可以任意摆放,求最高是多少,其实就是在按底面积的大小排序,然后就最长上升子序列,每块砖头有6种情况#include #include #include #include using namespace std;const int MAXN = 220;s

2013-09-13 19:39:13 863 2

原创 UVA - 10285 Longest Run on a Snowboard

题意:求最长的滑雪长度,只有当当前的高度大于下一步的高度的时候才能划到哪里,我们可以从头开始dp,顺便记录结果,#include #include #include #include using namespace std;const int MAXN = 110;int dir[4][2] = {{0,1},{0,-1},{-1,0},{1,0}};int G[MAXN][

2013-09-13 18:50:45 728

原创 UVA - 10465 Homer Simpson

题意:在尽量让时间步浪费的情况下使得吃的汉堡最多贪心:#include #include #include using namespace std;const int MAXN = 10005;int dp[MAXN],num[MAXN];int main(){ int m,n,t; while (scanf("%d%d%d",&m,&n,&t) != EO

2013-09-13 17:19:24 964

原创 UVA - 531 Compromise

题意:求最长公共子序列,打印路径,用path[i][j]保存状态,注意输出格式#include #include #include #include using namespace std;const int MAXN = 110;char str1[MAXN][35],str2[MAXN][35];int dp[MAXN][MAXN],path[MAXN][MAXN];v

2013-09-13 09:20:58 690

原创 UVA - 10130 SuperSale

题意:多次的背包问题#include #include #include using namespace std;int main(){ int t,dp[40]; scanf("%d",&t); while (t--){ int p,w; memset(dp,0,sizeof(dp)); int n;

2013-09-12 23:09:20 678

原创 UVA - 624 CD

题意:重量和价值相同的01背包问题,用path[i][j]保存第i个物品放入重量为j的时候价值最大#include #include #include using namespace std;const int MAXN = 10005;int w,n,arr[25],dp[MAXN];bool path[25][MAXN];int main(){ while (

2013-09-12 21:24:41 704

原创 UVA - 348 Optimal Array Multiplication Sequence

题意:矩阵连乘问题#include #include #include #include using namespace std;const int MAXN = INT_MAX;int n;struct node{ int a,b;}arr[15];int dp[20][20];int p[20][20];int Mark(){ for (int i

2013-09-12 20:12:32 720

原创 UVA - 562 Dividing coins

题意:求将硬币分成差最小的两份,输出差值,这题与凑硬币不同的地方是,每个硬币只有一个,所以我们从sum / 2 开始凑#include #include #include #include using namespace std;const int MAXN = 110;int arr[MAXN],dp[MAXN*550];int n;int main(){ int t

2013-09-10 20:49:45 739

原创 UVA - 357 Let Me Count The Ways

题意:还是凑钱问题#include #include #include #include using namespace std;const int MAXN = 30005;int money[5] = {1,5,10,25,50};long long dp[MAXN];int main(){ memset(dp,0,sizeof(dp)); dp[0]

2013-09-10 19:26:54 724

原创 UVA - 147 Dollars

题意:输出组合的方法种数,将单位同一就可以了#include #include #include #include using namespace std;const int MAXN = 30005;long long dp[MAXN];int money[11] = {5,10,20,50,100,200,500,1000,2000,5000,10000};int mai

2013-09-10 19:06:45 674

原创 UVA - 10192 Vacation

题意:求最长公共子序列,在输入的地方纠结的好久#include #include #include #include using namespace std;const int MAXN = 110;string str1,str2;int dp[MAXN][MAXN];int main(){ int t = 0; while (getline(cin,st

2013-09-10 12:26:31 690

Spring-AOP-JDK动态代理

Spring-AOP-利用java中的动态代理和Spring的拦截器做到AOP

2015-05-12

Spring核心学习IOC部分

Spring核心学习IOC部分:从最简单的BeanFactory开始一步步完善类似Spring的功能

2015-05-11

intellij idea 快捷键

intellij idea 常用的快捷键

2014-05-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除