动态规划
文章平均质量分 56
SSLGZ_yyc
这个作者很懒,什么都没留下…
展开
-
[HAOI2012]音量调节
......题解dp......程序:#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,beginlevel,maxlevel;bool a[70][1010];int main(){ freopen("song.in","r",stdin); freopen("song.out","w",stdout); sca.原创 2020-10-17 13:45:36 · 299 阅读 · 1 评论 -
统计蚂蚁
题目描述蚂蚁山上有T(1<=T<=1,000)种蚂蚁,标记为1…T,每种蚂蚁有N_i只蚂蚁(1<=N_i<=100),现有A(A<=5000)只蚂蚁,从中选出S,S+1,…,B(1<=S<=B<=A)只蚂蚁一共有多少种选法?如有5只蚂蚁分别为{1,1,2,2,3},一共有3种蚂蚁,每一种蚂蚁的数量分别为2,2,1,以下是选不同数量蚂蚁的方法:1个蚂蚁3种选法:{1}{2}{3}2个蚂蚁5种选法:{1,1}{1,2}{1,3}{2,2}{2,3}3个蚂原创 2020-08-21 16:10:33 · 207 阅读 · 0 评论 -
[JSOI2013]吃货 JYY
.....分析.....程序:#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;int n,m,tot,ans,head[20],bin[20],pin[20],g[1<<15],dist[20][20],f[1600000],deg[2.原创 2020-08-20 16:20:51 · 179 阅读 · 0 评论 -
KC的瓷器
题目描述KC来到了一个盛产瓷器的国度。他来到了一位商人的店铺。在这个店铺中,KC看到了一个有n(1<=n<=100)排的柜子,每排都有一些瓷器,每排不超过100个。那些精美的艺术品使KC一下心动了,决定从N排的商品中买下m(1<=m<=10000)个瓷器。这个商人看KC的脸上长满了痘子,就像苔藓一样,跟精美的瓷器相比相差太多,认为这么精致的艺术品被这样的人买走艺术价值会大打折扣。商人感到不爽,于是规定每次取商品只能取其中一排的最左边或者最右边那个,想为难KC。现在KC又获知每个原创 2020-08-19 15:34:51 · 236 阅读 · 0 评论 -
不知道该叫啥
......程序:#include<iostream>#include<cstdio>#include<cstring>using namespace std;long long n,m,s[70000],t[70000],tj,mo=1000000007,ans=0,f[101][70000];int main (){ scanf("%lld%lld",&n,&m); for (int j=1,x;j<=m;j..原创 2020-08-14 19:39:09 · 119 阅读 · 0 评论 -
双端队列xLIS问题
.....分析如果我们将原序列反过来接在原序列上,如12→2112设原序列在双端队列中插入完毕后得到的序列为A(从这开始都为蒟蒻的个人理解,有误请见谅)则在新序列上必包含A若在新序列中求一个上升子序列,设为B则A必包含B若B为最长上升子序列,则B为答案.....程序:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usi..原创 2020-08-14 16:08:00 · 289 阅读 · 0 评论 -
俄罗斯套娃
题目描述INPUTOUTPUTData Constraint输入输出输入样例10 1000输出样例3628800......分析......程序:#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,k;long long mo=10000000007,ans,sum,f[5][3005];int m原创 2020-08-13 20:36:31 · 167 阅读 · 0 评论 -
中国象棋
题目描述这次小可可想解决的难题和中国象棋有关。在一个 N 行 M 列的棋盘上,让你放若干个炮(可以是 0 个),使得没有任何一个炮可以攻击另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮能攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好有一个棋中。你也来和小可可一起锻炼一下思维吧!输入一行包含两个整数 N, M,之间由一个空格隔开。输出总共的方案数。由于该值可能很大,只需给出方案数模 9999973 的结果。输入样例1 3输出样例7说明数原创 2020-08-12 16:18:02 · 167 阅读 · 0 评论 -
开心的金明:顺推法
题意在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。分析设 f[i,j]表示前i件物品,总重量不超过j的最优价值则 f[i,j]=max{f[i-1,j-w[i]]+P[i]*v[i],f[i-1,j])(1=w[i])顺推F[m,n]即为最优解varn,m,i,j:longint;w:array[1..3原创 2017-03-01 16:53:46 · 289 阅读 · 0 评论 -
采药:顺推法
题意在规定的时间内,可以采到的草药的最大总价值。分析设 f[i,j]表示前i件物品,总重量不超过j的最优价值则 f[i,j]=max{f[i-1,j-w[i]]+P[i],f[i-1,j])(1=w[i])顺推F[m,t]即为最优解vart,m,i,j:longint;w:array[1..1000]of longint;p:array[1.原创 2017-03-01 17:00:11 · 291 阅读 · 0 评论 -
完全背包:二维数组
题意设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。分析公式:f[i,j]:=max(f[i-1,j],f[i,j-w[i]]+p[i]; 最大价值=f[n,m]varw,p:array[0..30原创 2017-03-02 16:30:00 · 648 阅读 · 0 评论 -
完全背包:一维数组
题意设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。分析f[j]:=max(f[j],f[j-w[i]]+p[i];最大价值=f[m];varw,p:array[0..30]of longint;原创 2017-03-02 16:58:43 · 217 阅读 · 0 评论 -
完全背包:以重量分阶段
题意设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。分析if (i>=w[j]) then t:=f[i-w[j]]+p[j];if t>f[i] then f[i]:=t;结果=f[m];var原创 2017-03-02 17:11:32 · 202 阅读 · 0 评论 -
最小代价问题
题意设有一个n×m(小于100)的方格(如图所示),在方格中去掉某些点,方格中的数字代表距离(为小于100的数,如果为0表示去掉的点),试找出一条从A(左上角)到B(右下角)的路径,经过的距离和为最小(此时称为最小代价),从A出发的方向只能向右,或者向下。 分析k[i,j]:=a[i,j]+max(k[i,j-1]+a[i,j],k[i-1,j]+a[i,j]);结果=k原创 2017-03-03 22:09:25 · 274 阅读 · 0 评论 -
数字三角形:逆推法
题意写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。分析这题我是用逆推法来做的按三角形的行划分阶段,若行数为 n,则可把问题看做一个n-1个阶段的决策问题。先求出第n-1阶段(第n-1行上各点)到第n行的的最大和,再依次求出第n-2阶段、第n-3阶段……第1阶段(起始点)各决策点至第n行的最佳路径。设:f[i,j]为从第i阶段中...原创 2017-02-24 21:28:18 · 545 阅读 · 0 评论 -
城市交通
题意有n个城市,编号1~n,有些城市之间有路相连,有些则没有,有路则当然有一个距离。现在规定只能从编号小的城市到编号大的城市,问你从编号为1的城市到编号为n的城市之间的最短距离是多少?分析if map[j,i]if dis[j]+map[j,i]dis[i]:=min;结果=dis[n];vardis:array[1..100]of long原创 2017-02-25 07:58:59 · 478 阅读 · 0 评论 -
取数字问题:动态规划
题意给定M*N的矩阵,其中的每个元素都是-10到10之间的整数。你的任务是从左上角(1,1)走到右下角(M,N),每一步只能向右或向下,并且不能走出矩阵的范围。你所经过的方格里面的数字都必须被选取,请找出一条最合适的道路,使得在路上被选取的数字之和是尽可能小的正整数。分析设f[i,j,k]为到i、j,数k存不存在 if a[i-1,j,k]=true then f[i,原创 2017-03-04 10:31:28 · 459 阅读 · 0 评论 -
最小乘车费用
题意假设某条街上每一公里就有一个公共汽车站,并且乘车费用如下表: 而任意一辆汽车从不行驶超过10公里。某人想行驶n公里,假设他可以任意次换车,请你帮他找到一种乘车方案,使得总费用最小 分析f[i]:=min(f[i],f[i-j]+a[j]) vari,j,n:longint;f,a:array[0..100]of longint;原创 2017-03-04 10:38:40 · 390 阅读 · 0 评论 -
火车票
题意一个铁路线上有n(2<=n<=10000)个火车站,每个火车站到该线路的首发火车站距离都是已知的。任意两站之间的票价如下表所示:站之间的距离 - X 票价 0L1L2其中L1,L2,L3,C1,C2,C3都是已知的正整数,且(1 分析设f[i]表示从起点站(站A)到站i的最少费用。x表示某一站j与站i的间距离。F[I] = min{f原创 2017-03-17 19:31:14 · 308 阅读 · 0 评论 -
数字游戏
题意小W发明了一个游戏,他在黑板上写出了一行数字a1,a2,a3,……,an,然后给你M个回合的机会,每会回你可以从中选择一个数字擦去它,接着剩下来的每个数字ai都要递减一个值bi。如此重复m个回合,所有你擦去的数字之和就是你所得的分数。小W和他的好朋友小Y玩了这个游戏,可是他发现,对于每个给出的a和b序列,小Y的得分总比他高,所以他就很不服气。于是他想让你帮他算算,对于每个a和b序列,可以得原创 2017-03-17 20:43:16 · 379 阅读 · 0 评论 -
求最长不下降序列:逆推法
题意当原始数列给出后,求出最长的不下降数列的长度。 分析f[i]表示第i数为起点到第n个数的最长不下降长度(倒推法)。F[i]= max{1, F[j] + 1} (j = i+1…n, 且A[i] F[n]=1;最后一个循环,找出f[i]中最大的那一个。varmax,n,i,j,l:longint;f,a:array[1..2000]of原创 2017-02-25 10:53:49 · 303 阅读 · 0 评论 -
数字三角形:顺推法(二维数组)
题意写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。分析这题我是用顺推法来做的按三角形的行划分阶段,若行数为 n,则可把问题看做一个n-1个阶段的决策问题。先求第2行各元素到起点的最大和,再依次求出第3,4,5,......,.n-1,n到起点的最大和,最后找第n行的最大值设f[i,j]为第i行第j列上点到起点的最大和,状态转移...原创 2017-02-24 22:08:24 · 602 阅读 · 0 评论 -
数字三角形:顺推法(一维数组)
题意写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。分析f[j] 表示第i行第j个位置上的数到顶点的最大值。F[j]=max{a[j]+f[j-1],a[j]+f[j]}2<=j<iF[1]=a[1]+f[1]varn,i,j,w:longint;a,f:array[1..10000]of longint;begin...原创 2017-02-25 11:33:05 · 381 阅读 · 0 评论 -
叠放箱子问题
题意 某港口有一批集装箱,将其编号,分别为1至N。每一个箱子的外型尺寸都是一样的,现在要将其中某些集装箱叠放起来,集装箱叠放的规则如下:(1)每个集装箱上最多只能直接叠放一个集装箱。 (2)编号较小的集装箱不能放在编号较大的集装箱之上。 (3)每个集装箱都给出了自身的重量和可承受的重量,每个集装箱之上的所有集装箱重量之和不得超过该集装箱的可承受的重量。 现在要求你原创 2017-03-18 10:27:51 · 529 阅读 · 0 评论 -
打鼹鼠
题意在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死。而机器人每一时刻只能够移动一格或停留在原地不动。机器人的移动是指从当前所处的网格移向相邻的网格,即从坐标为(i,j)的网格移向(i-1, j),(i+1, j),(i,j-1),(i,j+1)四个网格,机器原创 2017-03-09 16:49:33 · 302 阅读 · 0 评论 -
排队买票
题意一个演唱会即将举行,现有 N 个歌迷排队买票,一个人一张,而售票处规定,一个人每次最多买两张,假设买一张票的时间为 Ti ( 1分析f[i]:=min(t[i]+f[i-1],f[i-2]+r[i-1]);varn,i,tj:longint;t,r,f:array[0..10000]of longint;function min(x,原创 2017-03-09 17:07:55 · 767 阅读 · 1 评论 -
机器分配
题意总公司拥有高效生产设备M台,准备分给下属的N个公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M《=15,N〈=10。分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数M。 分析f[i,j]表示前i个公司分配j个机器的最大盈利f[i,j]:=max(f[i,j],f[i-1,k]+a...原创 2017-03-10 20:24:55 · 315 阅读 · 0 评论 -
公共子串
题意设有A、B两个字符串,找出A、B共同子串,每个字符串无相同字符,可以不连续,但顺序不能颠倒。分析if s1[i]=s2[j] then f[i,j]:=f[i-1,j-1]+1 else f[i,j]:=max(f[i-1,j],f[i,j-1]);vars1,s2:string;l1,l2,i,j:longint;f:array[0..300,原创 2017-03-07 16:57:51 · 213 阅读 · 0 评论 -
大厅安排(normal)
题意有一个演讲大厅需要GEORGE管理,演讲者们事先定好了需要演讲的起始时间和中止时间。GEORGE想让演讲大厅得到最大可能的使用。我们要接受一些预定而拒绝其他的预定,目标自然是使演讲者使用大厅的时间最长。为方便起见,假设在某一时刻一个演讲结束,另一个演讲就可以立即开始。计算演讲大厅最大可能的使用时间。分析f[i]:=tj+a[i,2]-a[i,1];(f[i]>=原创 2017-03-14 16:58:42 · 534 阅读 · 0 评论 -
拔河比赛
题意一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。 分析这道题目不满足动态规划最优子结构的特性。因为最优子结构要求一个问题的最优解只取决于其子问题的最优解。就这道题目而言,当前n-1个人的分组方案达到最优时,并不意味着前n个人的分组方案也最优。但题目中标注出原创 2017-03-16 17:16:56 · 1233 阅读 · 0 评论 -
庆功会(多重背包)
Description为了庆贺班级在校运动会上取得第一名的成绩,班主任决定开一场庆功会,为此拔款购买奖品奖励运动员,期望拔款金额能购买最大价值的奖品,可以补充他们的精力和体力。Input 第一行二个数n(n<=500),m(m<=5000),其中n代表希望购买的物品的种数,m表示班会拨的钱数。接下来n行,每行3个数,v、w、s,分别表示第I种物品的价格、价值(价格 与原创 2017-04-21 18:59:54 · 411 阅读 · 0 评论 -
混合背包
Description背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少?Input 第一行两个数V,N下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi=1表示至多取一件,Mi>1表示至多取Mi件,原创 2017-04-21 19:08:43 · 218 阅读 · 0 评论 -
潜水员(二维费用的背包问题)
Description潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种的数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少?例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量: 3 36 120原创 2017-04-21 19:27:02 · 1855 阅读 · 0 评论 -
分组背包
Description有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。Input 第一行:三个整数,v(背包容量,v<=200),n(物品数量,n<=30)和t(最大组号,t<=10);第2..n+1行:每行三原创 2017-04-21 19:48:26 · 225 阅读 · 0 评论 -
石子归并
s[i]表示前i堆石头的价值总和,f[i,j]表示把第i堆到第j堆的石头合并成一堆的最有价值。varn,i,j,k:longint;s:array[0..30]of longint;f:array[0..100,0..100]of longint;a:array[0..100]of longint;function min(a,b:longint):longint;原创 2017-04-22 11:55:13 · 229 阅读 · 0 评论 -
乘积最大
Description 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分原创 2017-04-26 15:55:21 · 266 阅读 · 0 评论 -
迷之阶梯
问题描述: 在经过地球防卫小队的数学家连续多日的工作之后,外星人发的密码终于得以破解。它告诉我们在地球某一处的古老遗迹中,存在有对抗这次灾难的秘密道具。防卫小队立刻派出了一个直升机小分队,迅速感到了这处遗迹。要进入遗迹,需要通过一段迷之阶梯。登上阶梯必须要按照它要求的方法,否则就无法登上阶梯。它要求的方法有以下三个限制:1. 如果下一步阶梯的高度只比当前阶梯高 1,则可以直接登上。2. 除了第一原创 2017-08-09 07:23:33 · 402 阅读 · 0 评论 -
打包
Description 你现在拿到了许多的礼物,你要把这些礼物放进袋子里。你只有一个最多装下V 体积物品的袋子,你不能全部放进去。你也拿不动那么重的东西。你估计你能拿的最大重量为 G。现在你了解了每一个物品的完美值、重量和体积,你当然想让袋子中装的物品的完美值总和最大,你又得计划一下了。Input 第一行:V 和 G 表示最大重量和体积。 第二行:N 表示拿到 N 件礼物。 第三到N+2行:原创 2017-08-17 20:14:26 · 305 阅读 · 0 评论 -
最大约数和
【问题描述】 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。【输入格式】 输入一个正整数S。【输出格式】 输出最大的约数之和。样例输入 11 样例输出 9 样例说明 取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。数据规模 据规对于30%的数据,S<=0;对于100%的数据,S<=1000。分析 这其实是个01背包程序:vars,i,j,k原创 2017-08-18 15:33:27 · 478 阅读 · 0 评论 -
删数
Description 有N个不同的正整数数x1, x2, … xN 排成一排,我们可以从左边或右边去掉连续的i个数(只能从两边删除数),1<=i<=n,剩下N-i个数,再把剩下的数按以上操作处理,直到所有的数都被删除为止。 每次操作都有一个操作价值,比如现在要删除从i位置到k位置上的所有的数。操作价值为|xi – xk|*(k-i+1),如果只去掉一个数,操作价值为这个数的值。 任务原创 2017-08-13 21:06:49 · 343 阅读 · 0 评论