
动态规划
浪流人
这个作者很懒,什么都没留下…
展开
-
You Are the One HDU - 4283
The TV shows such as You Are the One has been very popular. In order to meet the need of boys who are still single, TJUT hold the show itself. The show is hold in the Small hall, so it attract a lot of boys and girls. Now there are n boys enrolling in. At原创 2021-06-04 21:31:01 · 118 阅读 · 0 评论 -
String painter HDU - 2476 区间dp
There are two strings A and B with equal length. Both strings are made up of lower case letters. Now you have a powerful string painter. With the help of the painter, you can change a segment of characters of a string to any other character you want. That原创 2021-05-31 20:01:39 · 157 阅读 · 0 评论 -
Halloween Costumes LightOJ - 1422 区间dp
题目大意:按顺序去参加舞会。每个舞会对衣服都有要求。可以连续穿好多件衣服。需要时候就脱下来,但是一旦脱下来,这件衣服就脏了。问最少需要几件衣服。241 2 1 271 2 1 1 3 2 1考虑新加的衣服和里面的衣服是否相同就可以了如果第k天和第j天所需要的衣服颜色相同,到 j-1天将外面的衣服全脱去就可以了状态转移方程dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j-1])#include<stdio.h>#include<strin原创 2021-05-17 20:21:16 · 178 阅读 · 2 评论 -
Dima and Salad 01背包变形
题意:n件东西,有属性a和属性b。要选取若干件东西,使得∑aj∑bj=k。在这个条件下,问∑aj最大是多少。将a作为价值,a-k*b作为重量w,w有正有负,dp分成正负,两组求当前重量下的最大价值dp1和dp2相同时恰好是a/b=k#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<queue>#include<algori原创 2021-05-14 17:41:44 · 175 阅读 · 1 评论 -
2020蓝桥杯模拟题 矩阵
把 1∼2020 放在 2×1010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?答案很大,你只需要给出方案数除以 2020 的余数即可。填数字一般都是dp,我们假设i代表上边一行,j代表下边,dp[i][j]=dp[i-1][j]dp[i][j-1];但本题有要求对于左边的数一定比右边的数小,只需要从小到大填数即可,对于 上边的数一定比下边的数小,我们需要保证从小到大的同时,上边必须先有数字,再填下边的数#include<stdio.h>.原创 2021-04-16 19:28:30 · 1016 阅读 · 3 评论 -
测试次数 蓝桥杯
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。如果到了塔的最高层第n层扔没摔坏,则耐摔指数原创 2021-04-02 09:36:55 · 1796 阅读 · 2 评论 -
「一本通 4.2 例 1」数列区间最大值 RMQ 问题 和st算法
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。st算法就是动态规划,首先弄清楚dp[i][j]的含义,即表示从i开始的2的j次方个数的最值,将区间分成两部分,每部分都有2的j-1次方个数,一部分是从i到i+2的j-1次方,另一部分是从i+2(j-1)到i+2j,可以得到状态转移方程为dp[i, j]=max(dp[i,j-1], d原创 2021-03-09 19:59:10 · 327 阅读 · 0 评论 -
Multiplication Puzzle,区间dp
l是长度,k是中间位置,j是终点,从1到3开始,长度是3#include<stdio.h>#include<string.h>#include<math.h>#include<stack>#include<algorithm>#define mem(a,b) memset(a,b,sizeof(a))const int N=202;typedef long long ll;using namespace std;int a[N原创 2021-02-19 21:57:51 · 102 阅读 · 0 评论 -
背包理解
01背包有 N N N件物品和一个容量为 V V V的背包。第 i i i件物品的费用是 w [ i ] w[i] w[i],价值是 v [ i ] v[i] v[i],求将哪些物品装入背包可使价值总和最大。for (int i = 1; i <= n; i++)for (int j = V; j >= w[i]; j–)f[j] = max(f[j], f[j - w[i]] + v[i]);完全背包有 N N N种物品和一个容量为 V V V的背包,每种物品都有无限件可用。原创 2020-10-16 16:38:02 · 154 阅读 · 1 评论 -
测试次数 2018届蓝桥杯b组真题
dp[i][j]=min(dp[i][j],max(dp[i][j-k],dp[i-1][k-1])+1);dp存的是测试次数i是第几个手机,j是当前手机测试到第几层,k是从k层扔下。dp[i][j-k]是从第k层扔没摔坏,所以可以从k再加k层dp[i-1][k-1]是第k层摔坏了,手机数减1,楼层-1#include<stdio.h>#include<algorithm>using namespace std;int dp[5][2000];int main()原创 2020-10-15 20:06:32 · 170 阅读 · 0 评论 -
2020-10-13
题目 2268: [蓝桥杯][2016年第七届真题]密码脱落时间限制: 1Sec 内存限制: 128MB 提交: 390 解决: 107题目描述X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子输入输入一行,原创 2020-10-13 16:55:03 · 215 阅读 · 0 评论 -
第三周 动态规划
G - 跑跑卡丁车 HDU - 1494DP;*可以用dp[i]表示在第i段的最小时间,可以用j表示能量槽的个数,最多15个状态*dp[i][j]:在第i段时的第j个能量槽满的状态下的最小时间,可以肯定最先时间为*dp[n][k]:n表示圈数,k=[1,14],到达15段的时候会自动清零,也不会得到能量*dp[i][j]=min(dp[i][j],dp[i-1][j-1]+a[i],dp[i-1][j+5]+b[i])*注释:dp[i][j]可以通过dp[i-1][j-1]不使用加速卡直接行使得原创 2020-09-27 19:32:28 · 107 阅读 · 0 评论 -
第一周下 背包和记忆化搜索
A题 How many ways HDU - 1978题意 给你一张地图,地图上的数表示你获得的能量,问起点有多少种方式到达终点用记忆化搜索,把每个点能到达右下角的路径数给记录下来,下次再到达这个点的时候就可以直接应用的这数了#include <stdio.h>#include<algorithm>using namespace std;int m,n;int book[110][110],a[110][110];int dfs(int x,int y){原创 2020-09-26 09:40:14 · 138 阅读 · 0 评论 -
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191 多重背包
Input输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。Output对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个原创 2020-07-27 09:34:00 · 100 阅读 · 0 评论 -
饭卡 HDU2546
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。Input多组数据。对于每组数据:第一行为正整数n,表示菜的...原创 2020-04-13 21:19:18 · 123 阅读 · 0 评论 -
Coin Change UVA - 674 背包
从小的到大枚举面额(这个必须在外面循环)比如 枚举 dp[0] = 1,dp[1] = 1,dp[2] = 1,d[3] = 1,dp[4] = 1当枚举到dp[5]的 时候 第一遍 的结果是 dp[5] += dp[5-1] 此时 dp[5] = dp[4] = 1(实际上dp[5] = 2),下一个循环枚举到dp[5]的时候,dp[5] += dp[5-5] = 2。这样单独看某个值,最...原创 2020-04-11 21:48:44 · 136 阅读 · 0 评论 -
Ingenuous Cubrency——完全背包
原题链接#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;typedef long long LL;const int N=11000;LL dp[N];int main(){ int n,i,...原创 2020-04-11 21:02:01 · 236 阅读 · 0 评论 -
By Elevator or Stairs? dp问题
You are planning to buy an apartment in a n-floor building. The floors are numbered from 1 to n from the bottom to the top. At first for each floor you want to know the minimum total time to reach it ...原创 2020-04-08 21:38:05 · 217 阅读 · 0 评论 -
POJ 1976 A Mini Locomotive dp问题
挺简单的一道题 代码里有注释#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;int a[50005],dp[5][50002],b[50004];int lc(...原创 2020-04-08 15:04:54 · 119 阅读 · 0 评论 -
pta 整数拆分
给定一个整数n,将其无序拆分成最大数为k的拆分数,(n,k不超出100) 要求:所有的拆分方案不重复。 如当n=4,k=4时,一共有5种拆分方案,拆分如下:(1)4=1+1+1+1(2)4=1+1+2(3)4=1+3(4)4=2+2(5)4=4输入格式:每一行输入一组整数n,k,遇到键盘结束符^Z或文件结束符EOF时结束输入。输出格式:按行输出每组的拆分方案数。这个题和整数...原创 2020-02-27 19:46:48 · 4051 阅读 · 0 评论