
~~~~~acm~~~~~
文章平均质量分 72
空白君有着一把空白键blanKey
即使世界如此残酷,我们仍是努力挣扎着
/*算了,退役了,不挣扎了QWQ*/
展开
-
ACM 数塔/dp入门
从下往上,不多说,入门的dp这里写链接内容#include <stdio.h>int dp[10100];void main(){ int n,i,j; int temp=0; int a[10010]; int maxlen=0; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]原创 2015-09-12 16:24:27 · 821 阅读 · 0 评论 -
ACM POJ2533 简单dp
还是入门的dp,没办法,我还是菜鸟一个,但我会加油的!跟上一篇思想差不多,一个一个往下叠加这里写链接内容#include <stdio.h>int dp[10100];void main(){ int n,i,j; int temp=0; int a[10010]; int maxlen=0; scanf("%d",&n); for(i=1;i原创 2015-09-12 16:27:46 · 509 阅读 · 0 评论 -
ACM比赛需知
ACMICPC比赛的经验 1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果,必须开工其他题,如果WA,两道题同时做。交完每道题都要先打印。 2. 比赛时发的饭不是让你当时就吃的,那是给你赛后吃的。基本上比赛中前几名的队都没人吃,除非领先很多。 3. 很多选手,尤其是第一次参加比赛的,到一个新环境,全当旅游了,参观的参观,找同学的找同学,玩玩乐乐就把正事抛转载 2015-09-13 13:54:54 · 726 阅读 · 0 评论 -
hdu1003 Max Sum(LIS)
最长递增子序列类型的,求最长连续和最大的序列#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int main(){ int cas=1,t,n,sum,a;原创 2015-11-03 23:09:24 · 441 阅读 · 0 评论 -
hdu1503 Advanced Fruits (简单LCS)
典型最长公共子序列。#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>using namespace std;#define maxn 105int dp[maxn][maxn];char str1[maxn]原创 2015-11-03 21:16:32 · 625 阅读 · 0 评论 -
hdu1159 Common Subsequence(LCS)
LCS的无敌大水题#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;#define maxn 500int dp[maxn][maxn];char str1[maxn],原创 2015-11-03 22:01:45 · 387 阅读 · 0 评论 -
hdu 2014 超级楼梯
简单dp,逆向思维: m阶的楼梯,最后一次只能是在m-1阶或者m-2阶的楼梯上,所以总的方法就是走到m-1阶楼梯的走法加上m-2的走法,即: F(n)=F(n-1)+F(n-2);即是斐波那契递推 我用long long 是怕被爆,然而其实int也可以过。#include <stdio.h>#include <stdlib.h>#include <math.h>#原创 2015-10-19 23:24:03 · 1364 阅读 · 0 评论 -
真的真的真的
好不甘心……原创 2015-10-19 20:02:01 · 554 阅读 · 0 评论 -
hdu1087 Super Jumping! Jumping! Jumping!(LIS)
简单LIS#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <algorithm>using namespace std;#define inf 0x3f3f3f3f#define maxn 1005int dp[maxn],a[m原创 2015-11-04 23:23:29 · 431 阅读 · 0 评论 -
HDU2602
最基本的01背包问题,没什么好说的#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>using namespace std;#define max(a,b) (a)>(b)?(a):(b)int main(){ int T; int n,v原创 2015-10-21 14:27:49 · 344 阅读 · 0 评论 -
HDU2546
最贵的选择在最后买,当然,此时钱数要大于5元,背包容量就是v-5,物品就是i-1个,转移方程还是那个样子。 状态转移方程为:f[j]=max(f[j],f[j-price[i]]+price[i]) , f[j]表示买前i件物品,预算为j时的最大花销。 另外需要注意的是要考虑到一开始就少于5元的情况,就直接输出了,一开始没考虑到WA了好多次( # ▽ # )#include <iostream>原创 2015-10-21 17:37:12 · 446 阅读 · 0 评论 -
最长递增子序列详解(longest increasing subsequence)
发现一篇非常好的博文,分享一下。感谢joylnwang。原文点我点我点我对于动态规划问题,往往存在递推解决方法,这个问题也不例外。要求长度为i的序列的Ai{a1,a2,……,ai}最长递增子序列,需要先求出序列Ai-1{a1,a2,……,ai-1}中以各元素(a1,a2,……,ai-1)作为最大元素的最长递增序列,然后把所有这些递增序列与ai比较,如果某个长度为m序列的转载 2015-11-06 22:04:35 · 502 阅读 · 0 评论 -
hdu2222 Keywords Search (AC自动机)
AC自动机入门标准题。 主要总结建立fail指针过程:设这个节点上的字母为a,沿着他父亲的fail指针走,直到走到一个节点,他的儿子中也有字母为a的节点。然后把当前节点的失fail指针指向那个字母也为a的儿子。如果一直走到了root都没找到,那就把失败指针指向root。 使用广度优先搜索BFS,层次遍历节点来处理,每一个节点的失败路径。 #include <iostream>#include原创 2015-11-08 11:06:08 · 346 阅读 · 0 评论 -
hdu2896 病毒侵袭 (AC自动机)
只在每个模式串最后记录模式串的顺序号,中间全设为0即可,然后AC自动机跑一遍。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>#include <queue>#include <malloc.h>using n原创 2015-11-08 18:12:06 · 387 阅读 · 0 评论 -
hdu1671 Phone List (字典树)
题目点我点我点我题目意思:判断输入的电话号码中是否有号码是其他号码的前缀,很显然要用到字典树。 要注意每过一个样例就删除数,释放内存,不然内存会boom#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using原创 2015-11-07 12:30:14 · 436 阅读 · 0 评论 -
hdu1251 统计难题(字典树)
题目点我点我点我模版式的字典树,没啥好说的,只是hdu有个巨坑,用G++提交会boom内存,改用C++提交就AC……一开始改了N遍,快抓狂的时候点了一下讨论区,发现都这样or2……还是不懂为神马#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#includ原创 2015-11-07 14:46:13 · 405 阅读 · 0 评论 -
hdu3065 病毒侵袭持续中(AC自动机)
题目点我点我点我题意:给你一些字符串,再给你一个长字符串,问之前的那些字符串分别出现过几次,按输入的顺序输出字符串和其出现次数。 跟上题有一点点变化,主要是主串有可能有不是字母,查询时注意一下就可以了。 另开一个数组作为记录每个模式串的次数。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <s原创 2015-11-09 18:39:45 · 571 阅读 · 0 评论 -
uva10635 Prince and Princess(LCS转LIS)
明面好似是用LCS做,但是开一个(250*250)^2数组明显爆了,规模太大,而且时间复杂度肯定会超时的。看了一下其他解题报告才懂,好巧妙地转化为LIS。 思路:首先将王子的序列(也就是第一个序列)看作一个相对于公主的序列(第二个数列)是一个标准衡量的序列,就是将第一个序列按照输入的顺序定义为1,2,3,……,n,只不过值的定义不同了,就如: 第一个数列为:1,7,5,4,8,3,9 我们按这原创 2015-11-07 01:05:49 · 673 阅读 · 0 评论 -
菜鸟、大牛和教主,三者的区别
对菜鸟来说题目有三种:会算法且能AC的,会算法但不能AC的,不会做的对大牛来说题目有两种:会做的,不会做的对教主来说题目有两种:能AC的,数据有错的菜鸟提交WA了,找了N久找不出错时,在论坛大骂数据有错,但是没人理大牛提交WA了,找了N久找不出错时,写暴力程序或者求别人的AC程序对拍教主提交WA了,Judge马上修正数据菜鸟面转载 2015-10-25 16:01:37 · 1053 阅读 · 0 评论 -
POJ2287 Tian Ji -- The Horse Racing(田忌赛马/贪心)
贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比。 (因为若是田忌的别的马很可能就赢不了了,所以两者比) 2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。 (由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比) 3,若相等,则比较田忌的最慢马和齐王的最慢马 3.1,若田忌最慢马快于齐王最慢马,两者比。 (田忌的最慢马既然能赢一个就赢,不原创 2015-11-11 22:11:07 · 477 阅读 · 0 评论 -
poj1276 Cash Machine(多重背包)
题目点我点我点我题意:给你一个cash,然后有N种价值为D,数量为n的钱币,要求凑出最接近cash的价值。 多重背包。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;原创 2015-11-12 23:49:40 · 392 阅读 · 0 评论 -
hdu1059 Dividing (多重背包)
链接点我点我点我 简单多重背包#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int dp[120100],a[7];int v,k; //v为体积void Zero原创 2015-11-12 22:12:44 · 383 阅读 · 0 评论 -
hdu2191 题目太长不打了orz(多重背包)
第一次见这么长的题目…… 多重背包,可以说背包九讲的模版题。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int v;int dp[105],p[105],h[105原创 2015-11-12 22:42:05 · 524 阅读 · 0 评论 -
POJ2392 Space Elevator (多重背包)
题目点我点我点我题意:有一群奶牛向上太空,然后要用一块块塔搭上去,给出K种类型的塔,每种类型单块高度为h,在a高度一下都可以搭建,有c块。思路:多重背包问题,在进行多重背包之前要进行一次排序,将最大高度小的放在前面,只有这样才能得到最优解,如果将大的放在前面,后面有的小的就不能取到,排序之后就可以进行完全背包了。 注意这题只有花费,没有价值,利用dp记录能搭建的所有高度的情况,能搭原创 2015-11-13 16:46:56 · 471 阅读 · 0 评论 -
UVa 562 Dividing coins
题目连接 题目大意:有一堆硬币,要设法平均分成价值相等的两份,输出两份相差的价值。 思路:所有硬币的总价钱的一半看成容量v,使之装的价值最高,即转化为01背包问题,最后总价钱减去背包的价值的两倍即可。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#i原创 2015-10-27 22:58:23 · 476 阅读 · 0 评论 -
HDU2955 Robberies
题目链接实质是01背包问题,关键还是找出转移方程。 顺着题意做非常困难,需要转换思维,把最大风险指数改成最小逃跑所需指数,各银行的被抓指数也改成能逃跑的指数pi=1-pi,因此想要成功逃跑,总逃跑指数必须大于或等于最小逃跑所需指数,因为逃跑是独立事件,所以总逃跑指数=各逃跑成功指数相乘(我理解了好久才搞懂,可能也是我比较蠢的原因(┬_┬)重要!),在dp过程中设钱的数量为背包容量的大小 dp[j原创 2015-10-20 21:48:35 · 475 阅读 · 0 评论 -
hdu 2126 Buy the souvenirs
题目连接,点我点我点我题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数。思路:01背包问题,不过需要加多一维记录已买了多少物品,把买多少件物品看作价值,价钱看作花费,需要注意的是前一次和后一次递推中价值都是相差1的,dp[v][2] ,dp[v][0] 储存原本要记录的 dp ,即买了多少件物品,而 dp[v][1] 则记录方案数目。 dp[i][1] 都要初始化为原创 2015-10-29 19:36:56 · 491 阅读 · 0 评论 -
hdu 2087 剪花布条(KMP)
题目点我点我点我裸KMP,没啥好讲的。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>#include <malloc.h>#include <queue>#include <stack>using name原创 2015-11-14 17:31:02 · 351 阅读 · 0 评论 -
Hdu3466 Proud Merchants
[题目连接~点我点我点我](http://acm.hdu.edu.cn/showproblem.php?pid=3466)01背包变形,每做一次都是一次提高,这个题很有意思。这题因为涉及到q,所以不能直接就01背包了。因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m],再对第二个进行背包的时候,如果是普通的,应该会借用前面的d原创 2015-10-29 22:23:22 · 599 阅读 · 0 评论 -
POJ3181 Dollar Dayz
原以为跟前面两题一样,结果WA了几次,想了好久猜想到高精度问题,如输入1000 100,就算用一个long long数组也会溢出,结果为负数。本弱现在对于大数问题还没怎么研究,于是看了一下其他大牛的博客题解,受益匪浅啊~~~特别推荐kuangbin的,详细,而且有一步一步推导,值得看看 kuangbin博客 点我点我点我 再次感谢kuangbin及其他诸多大牛,膜拜膜拜#include <io原创 2015-10-30 23:54:52 · 558 阅读 · 0 评论 -
UVa674 Coin Change
完全背包入门,没什么好说的的。 先打表,速度会快很多。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;#define maxn 7500int dp[maxn];in原创 2015-10-30 18:46:05 · 506 阅读 · 0 评论 -
poj2063 Investment
题目大意:给你一笔金额,你要将这比金额去投资,现在有t种股票,每种股票都有一个价值和年收益,问你如何投资在n年后的最大收益 并且股票的价值都是1000的倍数,所以后面优化,对每个价值除以1000测试数据: 1 //有多少组测试数据 10000 4 //10000代表初始金额,4代表4年之后的最大收益 2 //有两种股票 4000 400 //接下来2行,每行原创 2015-10-31 17:42:50 · 550 阅读 · 0 评论 -
UVa147 Dollars
UVa674 coin change的强化,一样的思路,不过先全部乘上个100就好了,只是在精度上必须注意double和long long,因为这个WA了2次,想了N久才想到。#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algori原创 2015-10-30 19:50:47 · 403 阅读 · 0 评论 -
Uva624 CD (记录路径)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N minutes long.原创 2015-10-23 16:37:27 · 429 阅读 · 0 评论 -
POJ 1001 Exponentiation (高精度/大数乘法)
题目点我点我点我 思路:首先处理输入的输入数中的小数点,先把小数点去掉,把原来的数存储在整型数组中,记录小数点的位置,然后再开一个整型数组存储中间结果。接下来比较简单,设数组a和数组b一开始存储输入的数,数组rec是中间数组,每次由数组rec来保存数组a和数组b的相乘结果,然后把数组rec复制到数组a,要注意每次都要对rec清零。 得出结果后就是计算小数点的位置,这个由原来的位置先倒序(因为数组原创 2015-11-22 23:54:59 · 785 阅读 · 0 评论 -
ZOJ Most Powerful (状态压缩DP)
题目点我点我点我题目大意:有n种原子,两种原子相碰撞的话就会产生能量,其中的一种原子会消失。问这n种原子能产生的能量最大是多少。思路:简单的状态压缩DP,我是用1代表灭,0代表存活。 状态 :dp[state], 状态为state时的最大能量转移 :dp[state | (1 << j)] = max(dp[state | (1 << j)], dp[state] + a[i][j]) 表示的是原创 2015-11-22 21:39:21 · 471 阅读 · 0 评论 -
hihoCoder挑战赛16 王胖浩与三角形
题目1 : 王胖浩与三角形 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个三角形,三边长为a,b,c。他有特殊的能力,能增加三条边的边长,增加的总长度不能超过l。他想通过合理地使用他的特殊能力,使得三角形的面积最大。输入 第一行一个整数T,表示测试数据个数。以下T行,每行一个四个整数a,b,c,l。数据范围:1<=T<=10原创 2015-11-01 23:25:01 · 675 阅读 · 0 评论 -
POJ1185 炮兵阵地 (状态压缩DP)
题目点我点我点我 题目大意:简单不多说思路:先全列出所有可行的状态,放炮兵就为1,不放就为0,这时先不考虑地形,把可行状态列出来后,再与地形匹配,山地H为1,平原p为0,这样两者以二进制匹配得数为0则匹配成功。 然后第i行(i>2)只由第i-1行的状态和第i-2行的状态决定,dp[i][j][k]代表第i行的状态为j,第i-1行状态为k,所以有状态转移方程 dp[i][j][k]=max(dp[原创 2015-11-18 22:42:52 · 388 阅读 · 0 评论 -
ZOJ3623 Battle Ships
题意: 对方有L滴血,我们有n种船可以选择,每种船建造时间为t,建好后每秒对敌方造成l点伤害,问最少多少时间能干掉对方。 思路:以时间为容量,对对方造成的伤害为价值,完全背包,可以理解成先攻击再造船,因为这两者并没有冲突,状态转移方程:dp[j+time[i]]=max(dp[j]+j*time[i]);dp[j]表示在j这个时间,所造成的最大伤害。这样就可以枚举时间,在每个特定的时间内,枚举船原创 2015-11-01 14:08:27 · 449 阅读 · 0 评论 -
hdu3811 Permutation (状态压缩DP)
题目点我点我点我 题目大意:题目给出m对 a b,表示a位置放b,问你满足其中至少一对关系的总排列数。思路:表面上看似容斥定理,至于行不行我也没试过,用状态压缩DP就奇快,dp[i]记录的是第i种状态不符合a位置放b的情况的数目,dp[(1<#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm原创 2015-11-23 23:48:09 · 500 阅读 · 0 评论