
算法编程竞赛
编程题解
TWSF
敏而好学,不耻下问
展开
-
POJ 1157 花瓶插花问题
大意为F束花插入V个瓶子里面,花要按编号插,不同花插入不同的花瓶有不同的美观程度,要求最大的美观程度。采用DP做法。此题有两种解题,两种不同状态函数的表示。一种f[i][j]表示第i束花插入第[j]个瓶子里面所获得的最大的美观程度。则状态转移函数可以表示为f[i][j]=max(f[i-1][k]+a[i][j])其中i-1则输出为f[F][F]-f[F][V]之间的最大值。解法一原创 2017-04-18 08:52:19 · 809 阅读 · 0 评论 -
HDOJ 1532 网络流(FF + EK + Dinic)
题意:由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速,本题就是让你求出最大流速思路:套用网络流模板,这篇博文写的质量肯定不好,因为对于这种纯知识点的网络流题目,发表博文更应该注重的是知识点的讲解.这里只是把代码贴上而已.FF代码:#include #include #include #include #inclu原创 2017-04-19 10:41:38 · 367 阅读 · 0 评论 -
POJ 3687 逆向拓扑排序
题意:n个球,m个关系, a b 代表 a 比 b 轻, 按编号1~n输出每个球是第几大,要使得编号小的球排名尽量小. 例如:5->6->1 4->3->2 1号球可以是第3,4,5,6重 这里要选第三重, 那么二号球就只能是最重的一个了,即6. 输出答案为:3 6 5 4 1 2思路:反向建立拓扑排序, 则以重的球入度为0开始, 用优先队列每次弹出入度为零编号最大的球即可#define原创 2017-04-22 15:57:34 · 387 阅读 · 0 评论 -
vijos1037 双塔问题
题意:n个任意高度的水晶,建造两座塔,选取任意快,使得塔尽量高,且塔相等思路:分情况说:第i快石头1、不用:dp[i-1][j]2、放在高塔上:dp[i-1][j-a[i]]+a[i]3、放在低塔上并且放后不超过高塔:dp[i-1][j+a[i]]4、放在低塔上超过了高塔:dp[i-1][a[i]-j]+j代码:#include #define LL lo原创 2017-04-23 18:52:06 · 364 阅读 · 0 评论 -
vijos 1159 深搜 + dp
题意:n种容量的桶,每种无限. 求恰好装满v的缸需要的最少的桶思路:深搜 + DP#define mem(a, b) memset(a, b, sizeof(a))using namespace std;bool flag, dp[maxn];int m, n, v[204], ans[220], sum2;bool judge (int p){ mem(dp, 0);原创 2017-04-24 10:51:19 · 359 阅读 · 0 评论 -
vijos1264 lcs+ lis
题意 求两个串的最长上升公共子序列思路:if(a[i] == b[j]) dp[j] = maxx + 1.; 其中maxx为 b[j] 代码:#define INF 0x3f3f3f3f#define maxn 505#define Pair pair#define mem(a, b) memset(a, b, sizeof(a))using namespace std;原创 2017-04-24 11:11:59 · 241 阅读 · 0 评论 -
codeforces 429B
题目大意:两个人(假设为A,B),打算健身,有N行M列个房间,每个房间能消耗Map[i][j]的卡路里,A起点为(1,1)要达到(n,m)点,且每次只能向右走一步或向下走一步,B起点为(n,1),要达到(1,m),且每次只能向上走一步,或向右走一步。有要求A,B必须在某一个房间相遇一次,且A,B在该房间不再消耗卡路里,因为两人锻炼身体的速度不同,所以在相遇时经过的房间数亦可能不相同。问两人合计最多原创 2017-04-26 09:40:44 · 499 阅读 · 0 评论 -
codeforces 118D 记忆搜索
题意:n1个仆人,n2个骑士排成一排,不能有连续的k1个仆人,也不能有连续的k2个骑士,有多少种组合思路:记忆搜索,看代码代码:#define LL long long#define maxn 102#define mod 100000000#define INF 0x3f3f3f3f#define Pair pair#define mem(a, b) memset(a, b原创 2017-04-26 09:44:55 · 320 阅读 · 0 评论 -
图论模板
//TheWaySoFar图论模板一.最短路1.Dijkstra算法(邻接矩阵/邻接表)2.SPFA3.Bellman-ford4.folyd5.次短路6.K短路(Astart + SPFA)二.分图1.染色体判二分2.匈牙利算法三.拓扑排序1.模板(邻接表/邻接矩阵)四.并查集(简单略)五.最小生成树1.prim(邻接表/邻接矩阵)六.网络流1.FF原创 2017-04-30 20:57:24 · 421 阅读 · 0 评论 -
POJ 2479 两段最大子序列
/* 题意: 在s串种,求连续的整数和的串s1和s2,s1与s2不相交,使得s1+s2最大 思路: 正向dp和反向rev_dp,代表由某一点到i的最大和 dp[i] = max(dp[i- 1] + a[i] 正向sum 和 反向rev_sum,代表i点之前(之后)最大的连续字段和 枚举1~n点*/dp[1] = a[1];rev_dp原创 2017-05-01 20:30:25 · 411 阅读 · 0 评论 -
山东省第五届ACM省赛 C - Colorful Cupcakes
4.吃蛋糕 //山东省第五届ACM省赛 C - Colorful Cupcakes/* 题意:n块蛋糕 3种颜色A,B,C 分给一个圆桌n个人 相邻两人颜色不同 思路:五维数组 1维代表开始的颜色,2,3,4维代表三种颜色使用的次数 5维代表上一次使用的蛋糕是哪一种*/LL num[5][maxn][maxn][maxn][5];int numa, n原创 2017-05-01 22:20:06 · 343 阅读 · 0 评论 -
山东省第二届ACM省赛 I - Sequence
题意:n个数划分m组,所有组的和的平方相加最小思路:using namespace std;LL sum[maxn], dp[maxn];int num[maxn];int n, m;int main(){ _; int Test; cin >> Test; while (Test--) { cin >>...转载 2017-04-27 21:51:20 · 385 阅读 · 0 评论 -
POJ 2184 01背包
题意:每行给出si和fi,代表牛的两个属性,然后要求选出几头牛,是的则求出总S与总F的和,注意S与F都不能为负数思路:很明显的就是取与不取的问题,对于这类问题的第一想法就是背包,但是这道题目很明显与一般的背包不同,因为有负数,但是联想到以前也有这种将负数存入下标的情况,那就是将数组开大,换一种存法我们用dp[i]存放每个s[i]能得到的最佳F,那么我们就可以根据s[i]的取值采取两种不同的原创 2017-04-18 21:31:53 · 191 阅读 · 0 评论 -
HDOJ 5410 01背包+完全背包
题目大意:给定背包容量m,物品种类n,每种物品的重量w[i],还有卖的数量x对应的价值a[i]*x+b[i],求最大的价值。思路:01背包选好第一个物品,即确定价值量a[i]+b[i],然后完全背包走一遍,每次价值加a[i].代码:#include #include #include #include #include #include #include #include原创 2017-04-18 20:16:26 · 621 阅读 · 0 评论 -
POJ 1159 (转换为求LCS)
题意:给定一个字符串,任意位置添加字母形成回文字串,最少添加几个字母.思路:把字符串反转,求反转串和原串的最长公共子序列,ans=n-lcs代码:#include #include #include using namespace std;const int MAX_N = 5005;char s[MAX_N], t[MAX_N];int dp[3][MAX_N + 1];原创 2017-04-18 08:48:09 · 204 阅读 · 0 评论 -
HDOJ 1106
#include#include#include#include#includeusing namespace std;int isFive(char *c,int k){ int m=0,frontZero=0,sizen,num=0,f=0,en=1; for(int j=0;j<k;j++) { if(c[原创 2015-04-18 15:43:54 · 310 阅读 · 0 评论 -
ZOJ 3954 思维题
题意:已知七段灯abc...可以拼成1..9的所有的数字,(0代表灯亮,就是那种计算器的显示法) 然后给你任意n个数字和他们的01排列每一列都是不同的灯管 问这些排列是否合法思路:对于任意n个数,他们的abcdef的编码(按列由上到下)是确定的,把这些编码变成一个数 然后塞入map 再把标准的编码塞入map2 看最后map map2是否相等代码:#include #inclu原创 2017-04-17 21:56:26 · 523 阅读 · 0 评论 -
POJ 1083 线性DP
题意:在一条走廊的两侧各有200个房间,现在给定一些成对的房间相互交换桌子,但是走廊每次只能通过一组搬运, 也就是说如果两个搬运过程有交叉是不能同时搬运的,要依次来,一次搬运10min,问完成所有的搬运的最少用时。 思路:考虑每个房间有多少搬运过程需要经过,我们截取最大的房间经过的次数就可以了,挺锻炼思维的一道题。代码:#include #include #include #i原创 2017-04-17 22:23:42 · 261 阅读 · 0 评论 -
POJ 2385 线性DP
题意:有两棵苹果树,编号为1,2,每分钟有一棵树会掉落一个苹果。一头牛在树下接苹果,每分钟只能站在一棵树下,但在树间转移的时间忽略不计。给定最大的转移次数w,问这只牛最多能接住多少苹果?思路:水题代码:#include #include #include #include using namespace std;int dp[1002][32], num[1002];int原创 2017-04-17 22:25:37 · 243 阅读 · 0 评论 -
山东省第七届ACM F Feed the monkey (记忆搜索)
/*题意:3种水果,各有a,b,c个,一天喂一种水果,每种水果不能喂连续的n1,n2,n3天,问有多少种喂的方式思路:简单的记忆搜索dp[i][j][k][s][f]表示第一种水果吃掉i个第二种水果吃掉j个,第三种水果剩余k个,以s种水果结尾连续数量 f 在规定范围内的组合种类*/代码:#include using namespace std;#define ll long longc原创 2017-04-17 22:45:04 · 448 阅读 · 0 评论 -
HDU 1421(线性DP)
题意:看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的原创 2017-04-18 07:17:02 · 328 阅读 · 0 评论 -
POJ 1163 最大树路径
题意:73 88 1 02 7 4 44 5 2 6 5Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the原创 2017-04-18 08:56:52 · 291 阅读 · 0 评论 -
POJ 1088 递归+记忆化搜索
题目要求: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。求可以滑落的最长长度。思路:记忆搜索水题代码:#include #include #include #include using namespace std;const int maxn = 105;const int INF = 0x7fffffff;int a[maxn][maxn];int n原创 2017-04-18 08:58:23 · 326 阅读 · 0 评论 -
POJ 1797 (最短路变形)
题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量解题思路:相当于让选择的那条路最小值尽量大,更改一下最短路即可代码:#include #include #include #include #include #include #include #include #inclu原创 2017-04-18 11:14:08 · 509 阅读 · 0 评论 -
自用头模板待更新...
#include #include #include #include #include #include #include #include #include #include #define LL long long#define INF 0x3f3f3f3f#define maxn 1024#define Pair pairusing原创 2017-04-18 11:25:20 · 334 阅读 · 0 评论 -
python3 怎么安装 PIL
关于Pillow与PILPIL(Python Imaging Library)是Python一个强大方便的图像处理库,名气也比较大。不过只支持到Python 2.7。PIL官方网站:http://www.pythonware.com/products/pil/Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。目前最新版本是3.0.0。Pill...转载 2017-05-11 17:18:05 · 156378 阅读 · 12 评论