欢迎访问我的个人网站==》 jiashubing.cn

随笔分类 -  OJ_ZOJ

摘要:ClockTime Limit:2 Seconds Memory Limit:65536 KBYou are given a standard 12-hour clock with analog display, an hour hand and a minute hand. How many times does the minute hand pass the hour hand in a given time interval?Sample Input12 50 1 2 3 8 3 20 2 45 11 011 0 3 20 1 2 12 50 3 20 3 8Sam... 阅读全文
posted @ 2014-03-12 23:19 贾树丙 阅读(345) 评论(0) 推荐(0) 编辑
摘要:Divide and Count题目大意:给定箱子的数量和每个箱子的容量,在每个箱子里都装满对应容量的宝石,每颗宝石都是独一无二的,求一共有多少种放置方式。但是如果两个箱子的容量相同,则认为是 同一种箱子Sample input:23 331 2 3Sample output:1060分析:这是练习赛的时候处在HUST上的题目,当时感觉代码完全对了,却坑了半天,看了题解才发现,是最后除以相同的箱子的时候,是除以它的数量的阶乘,本来是这么想的,却先把它们给乘起来了,样例只是碰巧对而已。也用不到64位整数。代码如下: 1 #include 2 # include 3 # include 4 u.. 阅读全文
posted @ 2014-03-12 23:09 贾树丙 阅读(431) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1563题目大意:在h*w的矩阵里铺满1*3的小矩阵,共有多少种方法Sample Input3 33 100 0Sample Output228分析:状态压缩DP,跟ZOJ 1100 及其相识,不过那道题目使用1*2的木板平铺,题解链接:http://www.cnblogs.com/acm-bingzi/p/3289994.html 但是不能照搬这道题目的方法,3^9约等于20000,两次循环的话会超时,所以每次只找符合条件的状态。 每个格子有三种状态0,1,2,.. 阅读全文
posted @ 2013-10-05 22:43 贾树丙 阅读(364) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1625题目大意:将n个数重新排列,使得每个数的前一个数都不能和之前的一样,求一共有多少种排列方法ample Input:34Sample Output:311分析: CrazyAC's 解题报告: 本题一道DP题 仔细想想不难的 首先我们确定状态F[N]表示所产生的新排列的情况数 那么F[N]=f(F[N-1]) 怎么来确定他呢? 由于F[N-1]是排好了;所以只要把N往里插,唯一不可插的地方就是N-1后;所以共有N-1情况, 那么F[N]=(N-1)*.. 阅读全文
posted @ 2013-10-04 10:22 贾树丙 阅读(294) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2624题目大意:popo要将给定数量的灯变成自己想要的颜色,有一种魔法开关,可以将一连串的灯同时变成同一个颜色。给定灯的数量和popo想要实现的状态,求最小步数Sample Input5RGBGR4RGRG7ABACADA0Sample Output334分析:令f[x][y]表示从第 x 个灯到第 y 个灯变成目标状态的最小花费,则初始时为最大值。而f[x][x]=1。 则f[x][y] =min{ f[x][k-1]+f[k][y] | x 2 # inc. 阅读全文
posted @ 2013-10-04 10:10 贾树丙 阅读(379) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1368题目大意:计算从S到T中所有的数,其中0,1,2,3,4,5,6,7,8,9的个数,例如从1024到1032有1024 1025 1026 1027 1028 1029 1030 1031 1032,其中10个0,10个1,7个2,3个3等等Sample Input1 1044 497346 5421199 17481496 14031004 5031714 1901317 8541976 4941001 19600 0Sample Output1 2 1 1 阅读全文
posted @ 2013-10-02 21:37 贾树丙 阅读(235) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1411题目大意:连连看,给出每次连线的两个坐标,求能消去多少方块,拐弯最多2次Sample Input3 41 1 2 23 3 4 42 2 1 161 1 1 21 3 1 42 1 2 22 3 2 43 1 3 23 3 3 40 0Sample Output12分析:连线可以从外围绕过去,用BFS求出两个坐标能够到达的最少拐弯次数。注意是最少拐弯次数,而不是最短距离这道题目坑死我了,倒不是因为它的算法难,是一些小知识点代码如下: 1 # include 2 阅读全文
posted @ 2013-10-02 09:54 贾树丙 阅读(533) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3374题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子。已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金。给定n棵树上原有的黄金a[i]和每天可以新增加的黄金b[i],求他最多可以得到多少黄金。中途如果有1天不砍树的话,之后的日子久不能砍树,所有最好每天都砍树,或者直到树被砍完。Sample Input22 110 101 12 28 102 3Sample Output1021Hints:Test 阅读全文
posted @ 2013-09-20 21:45 贾树丙 阅读(426) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1711题目大意:给定一个正整数n,产生一个3*n位长的串,要求这个串中(1)A、B、C的数目都是n;(2)这个串的任意一个前缀,也就是从开始往后任意一段连续序列中字符的个数A>=B>=C。求满足条件的数目。Sample Input23Sample Output542分析:令dp[i][j][k] 表示从第一个字符开始,长度为i+j+k的串,A的个数为 i ,B的个数为 j ,C的个数为 k 的字符串的个数。 则如果i>=j>=k 则可以根据最 阅读全文
posted @ 2013-09-09 03:10 贾树丙 阅读(274) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1745题目大意:一个串由N个字符组成,每个字符是‘0’或者是‘1’,在任意一段连续的子序列中,要求0和1的个数的差不超过K,求一共有多少种这样的串,比如N=4,K=3时,除了0000和1111外的其他四个字符的串都符合要求。Sample Input1 24 3Sample Output214分析:这种涉及到任意子区间的性质的问题,如果每个子区间都考虑是很难处理的。注意到0和1的个数之差是满足区间加减法的,也就是说如果我们知道所有后缀的0和1的个数之差那么任意子串的0 阅读全文
posted @ 2013-09-07 21:57 贾树丙 阅读(1051) 评论(0) 推荐(0) 编辑
摘要:Mondriaan's DreamProblem DescriptionSquares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to draw on, for all of his paper was filled with squares and rectangles), he 阅读全文
posted @ 2013-08-29 19:07 贾树丙 阅读(628) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257题目大意:有 n(2 2 # include 3 const int N = (1<<10); 4 int A[11][11],dp[N]; 5 6 int main(){ 7 int n,i,j; 8 while(scanf("%d",&n) && n){ 9 for(i=0; i<n; i++)10 for(j=0; j<n; j++)11 scanf("%d",&am 阅读全文
posted @ 2013-08-28 17:56 贾树丙 阅读(270) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=1564题目大意:给定一个整数t,和n个元素组成的集合。求能否用该集合中的元素和表示该整数,如果可以输出所有可行解。1 2 # include 3 # include 4 using namespace std; 5 bool cmp(int a,int b){ 6 return a>b; 7 } 8 int a[15],t,n; 9 bool flag;10 int ans[15],len;11 12 void dfs(int sum,int mark){13 int i;14 if(sum == 0){1... 阅读全文
posted @ 2013-08-27 21:50 贾树丙 阅读(229) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=423Sample Input3(A-B + C) - (A+(B - C)) - (C-(D- E) )((A)-( (B)))A-(B+C)Sample OutputA-B+C-(A+B-C)-(C-(D-E))A-BA-(B+C)题目大意:给出加减代数表达式,仅由变量(大写字母表示),圆括号,加号 '+', 减号'-'组成,要求去掉多余的括号,但是不能改变表达式中的加号和减号,也就是说如果括号外面是减号,那就不能去掉分析: 对于每 阅读全文
posted @ 2013-08-22 18:52 贾树丙 阅读(481) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5048Sample Input4 3 Sample Output3题目大意:n个格子排成一条直线,可以选择涂成红色或蓝色,问最少m个连续为红色的方案数。分析:递推法dp[i]表示前i个最少m个连续为红色的方案数。转移时,分类讨论:1、前i-1个已经满足这个性质,那么,第i个随意涂色,方案数为dp[i-1]*2。2、前i-1个不满足这个性质,那么,要想成为方案,区间[i-m+1,i]必须涂成红色。并且,下标为i-m这个点必须是蓝色,否则就与情况1重复了。而且正是由于这 阅读全文
posted @ 2013-08-21 18:07 贾树丙 阅读(304) 评论(0) 推荐(0) 编辑
摘要:Greatest Common Increasing Subsequence题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1432题目大意:给出两串数字,求他们的最长公共上升子序列(LCIS),并且打印出来。Sample Input151 4 2 5 -124-12 1 2 4Sample Output21 4分析:神奇就神奇在是LIS与LCS的组合令dp[i][j]表示A串的前i个,与B串的前j个,并以B[j]为结尾的LCIS 的长度.状态转移方程: f(A[i]==B[j]) dp[i][j]=max(... 阅读全文
posted @ 2013-08-17 07:08 贾树丙 阅读(837) 评论(0) 推荐(0) 编辑
摘要:Anagrams by Stack题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4题目大意:输入两个字符串序列,判断能否通过对第一个字符串进行进栈出栈操作得到第二个字符串,若能则输出所有能达到的进出栈操作过程。我通过全排列每得到一组操作过程,则用函数按照这个操作过程,判断能否得到第二个字符串,若能则表明此操作过程可行,输出。代码如下: 1 # include 2 # include 3 # include 4 # include 5 using namespace std; 6 7 string str1,st. 阅读全文
posted @ 2013-08-15 03:59 贾树丙 阅读(370) 评论(0) 推荐(0) 编辑
摘要:Undercut题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=57题目大意:a card game,two player,每个player有n张牌,按顺序出牌,如果2张牌的点数相等,2个player都不得分;如果2张牌点数相差1,点数大的player得分为2张牌的点数和;如果2张牌的点数相差超过1,点数大的player得分为点数大的牌的点数;特殊情况,如果2张牌的点数分别为1和2,持2的player得分为6而不是3;给出2个player各n张牌的点数,要求输出每个player的得分情况代码如下: 1 # incl 阅读全文
posted @ 2013-08-15 03:31 贾树丙 阅读(530) 评论(0) 推荐(0) 编辑
摘要:Chopsticks题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=234题目大意:给定n个筷子的长度,取k+8套筷子,每套有3个,长度分别为A,B,C。要求k+8套筷子中(A-B)^2的和最小,输出这个最小值。分析:题目中筷子长度是非降序排列的,所以最小的两个A和B一定是相邻的。先不考虑筷子C,只要留着就行。 令dp[i][j]表示从 j 个筷子中取 i 套筷子的最优值。 dp[i][j] = min {dp[i][j-1] , dp[i-1][j-1] | (n - j > 3*(k - i))剩下的筷子 阅读全文
posted @ 2013-08-15 02:56 贾树丙 阅读(643) 评论(0) 推荐(0) 编辑
摘要:Common SubsequenceTime Limit:2 Seconds Memory Limit:65536 KBA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = another sequence Z = is a subsequence of X if there exists a strictly increasing sequence of indices of X such that... 阅读全文
posted @ 2013-08-15 02:40 贾树丙 阅读(311) 评论(0) 推荐(0) 编辑