===动态规划===
M_ercury_
这个作者很懒,什么都没留下…
展开
-
Loi Online Judge 47. 「Loi test 2017.5.31」换数游戏
题目描述 咸鱼 wyz 最近沉迷于一款游戏,叫做换数游戏。游戏开始时,有 n 个 1 到 40 之间的整数排成一排。wyz 每次可以将两个相邻的相等的正整数替换成一个比原数大一的正整数(需要注意的是,合并后的数可以大于 40)。wyz 可以在任意时刻结束游戏。结束时 wyz 的得分为所有剩余的数中最大的数。现在给定一个初始局面,你想知道 wyz 能获得的最高得分。输入格式 第一行一个正整数 n。原创 2017-06-03 20:17:22 · 432 阅读 · 1 评论 -
Codevs 1959 拔河比赛
题目: http://codevs.cn/problem/1959/题解:乱搞70:数据水 1.把对应质量赋价值,sum/2最高,向两边递减。 体积为人数,做01。只得70 2.0~sum/2递增赋值,大于sum/2的赋值为0; cnt=n/2,以cnt和n-cnt为体积分别做01(防止某一组的总重量大于sum/2),取差值小的那组答案输出。也得70 WA的原因: 有后效性,当前的原创 2017-09-28 18:15:18 · 331 阅读 · 0 评论 -
Codevs 2161 奶牛的锻炼
题目: http://codevs.cn/problem/2161/题解: dp[i][j]表示1~i-1分钟,疲劳度为j能跑的路程。 给状态: 1.特判:当前疲劳度为0,再休息一分钟; 2.休息直至疲劳度为0; 3.再跑一波。注: 一开始想了个n^3的算法, 即若休息,for 休息到为0的时刻~最终时刻( 因为可以一直休息呀),会t四个点。 所以可以特判当前为0时,转移给下一原创 2017-09-27 15:31:16 · 273 阅读 · 0 评论 -
Codevs 2033 邮票
题目: http://codevs.cn/problem/2033/题解: 完全背包,每个面值的邮票可以无限放,求一个最小张数,若小于等于n,则能凑出。 体积是要凑得面值,价值是枚数,取min,要初始化为inf。(类似于恰好装满体积为V的背包) 注意特判若最大值*总枚数以内的面值都能凑出,则输出maxx*n;代码:#include<iostream>#include<cstdio>u原创 2017-09-28 21:38:07 · 240 阅读 · 0 评论 -
Codevs 3027 线段覆盖 2
题目: http://codevs.cn/problem/3027/题解: 将所有线段按照右端点排序,划分阶段; dp[i]表示第i条线段是最后选择的线段时的最大价值; for 1~i 如果j线段的右端点#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace st原创 2017-09-21 19:47:51 · 273 阅读 · 0 评论 -
Codevs 2193 数字三角形WW
题目: http://codevs.cn/problem/2193/ 题解: 必须经过某点,分成两部分,顶点到某点,某点到底部 注意处理第二部分时,特判左边那一排不能越界。 代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N原创 2017-09-28 11:40:21 · 272 阅读 · 0 评论 -
Codevs 2189 数字三角形W
题目: http://codevs.cn/problem/2189/题解: dp[k][i][j]=1/0,表示走到i,j,是否有%=k的情况加一层for k值 0~99,当前节点的上两个节点如果有%=k的情况,tmp=k+当前节点的值,tmp%一下,到ij %=tmp的情况存在,所以dp[tmp][i][j]=1;注意初始化。代码:#include<iostream>#include<c原创 2017-09-28 16:12:19 · 395 阅读 · 1 评论 -
Codevs 4748 低价购买 最长下降子序列方案数
题目: http://codevs.cn/problem/4748/题解: 求最长下降子序列+方案数 第一问不在赘述,注意这里使用n^2算法,目的是维护以每个位置的数结尾的最长序列的长度。对于方案数:n^2 设g为方案数 计算i的g,for 1-i—1, 寻找i的lds的上一个元素(num[j]>num[i]&&dp[i]==dp[j]+1),此条件成立时,显然g相加。然而id原创 2017-10-03 20:24:03 · 338 阅读 · 0 评论 -
Codevs 1154 能量项链
题目: http://codevs.cn/problem/1154/题解: 区间dp; 大致思路(据说是区间DP的套路):len 1~ni 1~2*n-len //保证j<=2*n,且dp[k+1][]被算过 j=i+len-1;k i~j-1 dp[i][j]=max{dp[i][k]+dp[k+1][j]+num[i]*num[k+1]*num[j+1]}注原创 2017-09-03 14:45:36 · 335 阅读 · 0 评论 -
Codevs 2188 最长上升子序列
题目: http://codevs.cn/problem/2188/题意: 给定长度为n的序列,求包含第k个元素的最长严格上升子序列的长度; 题解: 1~k-1,大于num[k]的删掉; k+1~n,大于num[k]的删掉; 分别求LIS; 注意: 二分求LIS; upper_bound 返回一个迭代器,其指向范围中,第一个值大于 val 的元素。 如果所有的元素的值都不大原创 2017-09-02 17:08:52 · 251 阅读 · 0 评论 -
Openjudge 7624 山区建小学
描述政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,原创 2017-03-25 16:58:37 · 500 阅读 · 0 评论 -
Openjudge 7627:鸡蛋的硬度
7627:鸡蛋的硬度总时间限制: 1000ms 内存限制: 65536kB 描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛。参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法–从高度扔鸡蛋–来 测试鸡蛋的硬度,如果一次母鸡下的蛋从高楼的第a层摔下来没摔破,但是从a+1层摔下来时摔破了,那么就说这只原创 2017-04-26 20:36:10 · 318 阅读 · 0 评论 -
【笔记+代码】背包问题
01背包完全背包多重背包混合背包二维费用背包 n个物品 背包容量W w[i] 费用,v[i] 价值; 01背包每件物品选或不选。void zerone(int wei,int val){ for(int j=W;j>=wei;j--) d[j]=max(d[j],d[j-wei]+val);}for(int i=1;i<=n;i++) zerone(w[i],原创 2017-09-06 19:25:28 · 407 阅读 · 3 评论 -
Codevs 6162 Meronri爬楼梯
题目http://codevs.cn/problem/6162/题解前缀和优化一下递推,就可以发现答案是2的n-1次方 用无符号长整型unsigned long long 存 特判n=0,输出1代码:#include<iostream>#include<cstdio>using namespace std;unsigned long long ans,n,a;int main(){原创 2017-10-30 20:44:27 · 305 阅读 · 0 评论 -
10.30 task 二进制+精度+DP
alien题目描述题解代码polyline题目描述题解代码roadworkalien题目描述⼩ Y 最近正在接受来⾃ X3 星球的外星⼈的采访。在那个星球上,每个⼈的名字都是⼀个正整数。 所有在这个星球上的居民都是相互认识的。两个这个星球上的⼈的友谊值可以⽤这样来计算: 先把两个⼈ 的名字转换成二进制,然后把他们上下对齐排好,如果同⼀列的值相等,那么相应列的值就是 0,否则的原创 2017-11-01 07:19:16 · 345 阅读 · 0 评论 -
Codevs 1039 数的划分
题目: http://codevs.cn/problem/1039/题解: dp[i][j]表示把i这个数划分为j部分;dp[i][j]=dp[i-1][j-1]+dp[i-j][j];方程解释: 把i划分为j部分,若其中有1,则相当于把i-1划分为j-1部分; 若其中无1,把j部分都-1,相当于把i-j划分为j部分; dp的状态一般由前一个状态转移而来; sys:嗯,多dp几个,你原创 2017-09-23 18:38:08 · 246 阅读 · 0 评论 -
Codevs 4829 [DP]数字三角形升级版
题目: http://codevs.cn/problem/4829/题解: dp[i][j][0] 表示到i,j,还没有使用过重加 它由 未重加上两个节点 的值转移而来,dp[i][j][1] 已经使用重加 它由 已经重加过的上两个节点 的值 和 没有重加的两个节点+当前节点值 转移而来 空间限制,使用滚动数组,注意更新顺序。 wwq大佬还滚动了num数组。。。。 注意: 前几遍原创 2017-09-28 15:54:39 · 240 阅读 · 0 评论 -
Codevs 2198 数字三角形WWW
题目: http://codevs.cn/problem/2198/题解: 谁和我说WW和WWW一样的!!!我看都没看就直接交了,,果然wa代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N=50;int n,x,y,num原创 2017-09-28 11:47:08 · 337 阅读 · 0 评论 -
Codevs 1378 选课
题目: http://codevs.cn/problem/1378/题解: 树形DP 多叉树转二叉树:lft rit是左儿子和右儿子 int x=lft[fa[i]]; lft[fa[i]]=i; rit[i]=x; fa[x]=i;DP更新 f[i][j]表示分配给以i号节点为根的子树j的得分。 i号节点与其右儿子是兄弟,i号选否与右儿子无关 i号节点与其左儿子是父子,i号原创 2017-09-28 10:59:15 · 425 阅读 · 0 评论 -
HDU 2159 FATE 二维费用背包
题目: https://vjudge.net/problem/HDU-2159题解: 二维费用完全背包。 注意 读题啊!!!开始以为是求剩下的经验值,,其实是求最大的剩下的忍耐度!!!2333 代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;原创 2017-09-06 19:19:00 · 202 阅读 · 0 评论 -
HDU 1712 ACboy needs your help 分组背包
题目:https://vjudge.net/problem/HDU-1712题解:分组背包问题;代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N=100,M=100;int n,m,grp[N][M],dp[M];int mai原创 2017-09-06 19:58:33 · 250 阅读 · 0 评论 -
Codevs 1155 金明的预算方案
题目: http://codevs.cn/problem/1155/题解: 想要购买附件,必须购买主件。 由于某主见最多拥有两个附件,所以可以枚举情况,分组背包。 如主件 x 有附件 x1 , x2 ; 有 x, x+x1, x+x2, x+x1+x2 四种情况,这四种情况是互相排斥的,只能选择一种,符合分组背包要求; 预处理貌似有点复杂,求指导代码简洁化; 正解还可以用有依赖的背原创 2017-09-06 21:26:28 · 328 阅读 · 0 评论 -
Codevs 1169 传纸条
题解:一二是四维,三是三维两条路径同时dp,dp[i][j][x][y]表示第一条路径走到(i,j),第二条路径走到(x,y); 状态转移方程:dp[i][j][x][y]=max{ dp[i-1][j][x-1][y], dp[i-1][j][x][y-1], dp[i][j-1][x-1][y],原创 2017-09-02 21:49:02 · 259 阅读 · 0 评论 -
codevs 1380 没有上司的舞会
题目描述 Description Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。输入描述 Input Description 第一行一个整数N。(1<=N<=6000) 接下来N行,第i+1行表示i号原创 2017-03-01 20:39:03 · 297 阅读 · 0 评论 -
Codevs 1315 摆花
题目: http://codevs.cn/problem/1315/题解: dp[i][j]表示在前i中花里选择了j盆的方案数;由dp[i-1][j-k]递推累加而来,其中0<=k<=a[i],k为枚举第i种花选了多少盆; 看到网上有题解说是多重背包的方案数,,不是很懂。。。代码:#include<iostream>#include<cstdio>#include<algorithm>原创 2017-09-24 08:08:19 · 239 阅读 · 0 评论 -
Codevs 1647 炮兵阵地
题目: http://codevs.cn/problem/1647/题解: 状压dp,将每一行的状态(炮的位置和数量)用二进制01表示,再转成int;dp[i][j][k]表示第i行状态为j,第i-1行状态为k。 它由dp[i-1][k][w]转移而来,num[j]是j状态的炮数;dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][w]+num[j]);检查状态x原创 2017-09-23 12:00:16 · 194 阅读 · 0 评论 -
Codevs 1025 选菜
题目: http://codevs.cn/problem/1025/题解: 预处理略复杂的裸01; 价格—>*10; 出现多次,选择一次—>unique 重载结构体== 必须选择—>先for一遍。记录还剩的钱和已经得到的美味度。代码:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;原创 2017-09-25 15:55:33 · 196 阅读 · 0 评论 -
洛谷P1455 搭配购买
题目: https://www.luogu.org/problem/show?pid=1455#sub题解: 先用并查集维护搭配,然后将多个物品捆绑,做01背包; 注: 有一些num数组为空,不能贸然进行unique,会把不为空的相同num删去, 在01循环时,特判一下num.v即可代码:#include<iostream>#include<cstdio>#include<algo原创 2017-09-27 08:12:13 · 255 阅读 · 0 评论 -
Openjudge 4978:宠物小精灵之收服
题目: http://noi.openjudge.cn/ch0206/4978/ 题解: 裸二维背包。 最后统计答案的时候,注意一下要求体力消耗最小。哪有把精灵数量设为k的,,害我了一次。。。。哀怨ing代码:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,M原创 2017-09-27 10:07:49 · 667 阅读 · 0 评论 -
Poj 1384 Piggy-Bank 完全背包
题目: https://cn.vjudge.net/problem/POJ-1384题意: 多组数据; 给定存钱罐的初始重量和最终重量,给定n中货币的价值,重量; 求恰好满足存钱罐的最终重量的货币总钱数最小值。若不满足,输出”xxx”; 题解: 1.每种货币都能放任意数量,完全背包; 2.恰好装满存钱罐,取min,初始化dp[i]=inf(i!=0);保证每个状态都是从起点dp[0原创 2017-09-02 08:58:23 · 1248 阅读 · 0 评论 -
Codevs 2185 LCIS
题目: http://codevs.cn/problem/2185/题解: 求LCIS https://wenku.baidu.com/view/3e78f223aaea998fcc220ea0定义状态dp[i][j]表示a[1]~a[i],b[1]~b[j]中,以b[j]结尾的最长公共上升子序列。 流程: 1.a[i]!=b[j],a[i]不能和b[j]匹配,a[i]对答案无贡献原创 2017-09-27 19:10:58 · 188 阅读 · 0 评论 -
Codevs 2980 买帽子
题目: http://codevs.cn/problem/2980/题解: 求对称最长公共子序列,将字符串反转,求LCS 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,dp[600][600];char a[200][600]原创 2017-09-27 19:51:48 · 198 阅读 · 0 评论 -
Codevs 1052 地鼠游戏
题目: http://codevs.cn/problem/1052/题解:RT,原版的数据范围是200000,正解是贪心+堆,时间复杂度O(NlogN)但是dp只能做到O(n^2)不过,这是codevs嘛~,这数据简直太良心啦hhh——————来自FireStorm学长显然,先sort; 一开始想求一个赋值的最长上升子序列,成功被hack 如 t是1 3 3 5 9 ,完全可以都打了。学长原创 2017-09-28 07:29:26 · 247 阅读 · 0 评论 -
Codevs 3289 花匠
题目: http://codevs.cn/problem/3289/代码: dp水水//n^2可做 80分#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int N=100000+5000;int n,h[N],dp[2][N][2],ans;int main(){原创 2017-09-25 08:34:11 · 272 阅读 · 0 评论