- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 dp练习题5 大盗阿福
题意: 求不相邻的几个数和最大。 思路: 我们可以用f[j]表示前j个数的最优解,可得动态转移方程f[j]=max(f[j-1],f[j-2]+a[j])。 代码: #include int f[100001],a[100001],t,n,ans; int max(int x,int y) {return x>y?x:y;} int main() { scanf("%d
2017-12-30 16:40:46 346
原创 dp练习题4 鸡蛋的硬度
题意: 一共有n层楼,如果鸡蛋的硬度为a,那么从>a的地方扔下来都会碎, 思路: 用f[i][j]表示i层楼有j个蛋的最优解,可以得动态转移方程,f[n][m]=min(f[n][m],1+max(dp(i-1,m-1),dp(n-i,m)))其中dp(i-1,m-1)表示鸡蛋碎了,往i以下的楼找,鸡蛋数量-1;dp(n-i,m)表示鸡蛋没碎,往i以上的楼层找。 代码:
2017-12-30 16:29:34 381
原创 dp练习题3 糖果
题意: 求一些糖果价值的最大值,并且要是k的倍数。 思路: 我们可以设f[i][j]表示前i个糖果的价值%k余j的最大值,可得动态转移方程f[i][(f[i-1][j]+a[i])%k=max(f[i][(f[i-1][j]+a[i])%k,f[i-1][j]+a[j]),f[n][0]即为解。 代码: #include int f[1001][1001],a[101],
2017-12-30 16:12:15 694
原创 dp练习题2 计算字符串距离
题意: 求几对字符的编辑距离,和http://blog.csdn.net/ssl_hzb/article/details/78880014差不多。 思路: 在基础版上加上循环就好了。。 代码: #include #include int f[2002][2002],x,m,n; char a[2002],b[2002]; int min(int x,int y) {ret
2017-12-30 15:34:20 325
原创 dp练习题1 公共子序列
题意: 求两个字符串中相等子序列的最大长度。 思路: 用f[i][j]表示a的第i个和b的第j个之间的最长子序列,可得动态转移方程:如果a[i-1]=b[j-1] f[i][j]=f[i-1][j-1]+1; 如果a[i-1]不等于b[j-1] f[i][j]=max(f[i-1][j],f[i][j-1]) 代码: #include #include int f[1
2017-12-30 15:26:52 256
原创 SSL_1202 滑雪
题意: 求一个矩阵中最长的最长下降长度。例:1 2 3 4 5 6 7 8 9 中最长下降的长度是5,就是9-8-7-4-1或9-6-3-2-1或9-8-5-2-1 思路: 用记忆化搜索保存到达每一个点的最长下降长度。 代码: #include int t,ans,m,n,a[501][501],f[501][501],dx[5]={0,1,-1,0,0}
2017-12-23 15:29:05 212
原创 洛谷_2758 编辑距离
题意: 求一个字符串变成另一个字符串的最少编辑次数。 思路: 用f[i][j]记录ai到bj的最短编辑距离,可以得出动态转移方程: 当a[i]=b[j]时,f[i][j]=f[i-1][j-1];否则f[i][j]=min(f[i-1][j-1]+1,f[i][j-1]+1,f[i-1][j]+1, 其中f[i-1][j-1]+1代表把a[i]改为b[j],f[i][j-
2017-12-23 15:05:14 277
原创 SSL_1010 方格取数
Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例): 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取得
2017-12-23 14:47:12 284
原创 SSL_1597 石子合并问题
Description 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 编程任务: 对于给定n堆石子,编程计算合并成一堆的最小得分和最大得分。 Input 输入包括多组测试数据,每组测试数据
2017-12-16 11:26:35 290
原创 SSL_2863 合并石子
Description 在一个操场上一排地摆放着N堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请设计一个程序,计算出将N堆石子合并成一堆的最小得分。 Input 每组数据第1行为一个正整数N(2 思路: 用s[i]表示前i堆石子的重量总和,f[i][j]表示把第i堆合到第j堆的最优值,可得动态转
2017-12-16 09:30:07 312
原创 SSL_2295 暗黑破坏神
题意: 就是多重背包,要记录路径。 思路: 可以用一个数组记录路径,最后递归回去。 代码: #include int x,y,max1,n,m,p[501],c[501],w[501][51],f[501][501],b[501][501]; void print(int x,int y) { if (x==0) return; print(x-1,y-b[x][y]
2017-12-16 09:25:50 399
原创 SSL_1595 加法最大
题意: 和上一题差不多,就是符号改了一下,见http://blog.csdn.net/ssl_hzb/article/details/78817977。 思路: 这题可以用动态规划,设f[i][k]为在前i位插入k个符号的最优解,a[j][i]表示字符串第j位到第i位组成的数字,可得动态转移方程:f[i][k]=max(f[i][k],f[j][k-1]+a[j+1][i])
2017-12-16 08:51:50 237
原创 SSL_1007 乘积最大
题意: 给出一个长度为n的字符串,求在其中插入k1个乘号使结果最大。 思路: 这题可以用动态规划,设f[i][k]为在前i位插入k个符号的最优解,a[j][i]表示字符串第j位到第i位组成的数字,可得动态转移方程:f[i][k]=max(f[i][k],f[j][k-1]*a[j+1][i])。 代码: #include long long a[11][11],f[11]
2017-12-16 07:36:54 222
原创 SSL_2289 庆功会
Description 为了庆贺班级在校运动会上取得第一名的成绩,班主任决定开一场庆功会,为此拔款购买奖品奖励运动员,期望拔款金额能购买最大价值的奖品,可以补充他们的精力和体力。 Input 第一行二个数n(n<=500),m(m<=5000),其中n代表希望购买的物品的种数,m表示班会拨的钱数。 接下来n行,每行3个数,v、w、s,分别表示第I种物品的价格、价值(价格 与 价
2017-12-13 21:17:02 272
原创 SSL_2301 混合背包
Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少? Input 第一行两个数V,N下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi=1表示至多取一件,Mi>1表示至多取M
2017-12-13 21:10:00 279
原创 SSL_2293 暗黑游戏
题意: 混合背包。 思路: 判断数量,如果是0就按照完全背包的去做。 代码: #include int p,r,n,w1[1001],w[1001],c[1001],s[1001],f[1001][1001]; int max(int x,int y) { return x>y?x:y; } int main() { scanf("%d%d%d",&n,&p,&r);
2017-12-13 20:52:47 651
原创 SSL_1236 逃亡的准备
题意: 这题目就是一个多重背包。 思路: 动态转移方程:f[j]=max(f[j],f[j-k*v[i]]+k*w[i])。 代码: #include using namespace std; int n,m,f[2001],s[2001],v[2001],w[2001]; int max(int x,int y) { return x>y?x:y; } int mai
2017-12-13 15:57:07 354
原创 SSL_1197 质数和分解
题意: 求一个质数可以分解成几个质数的和的方案数。 思路: 这题可以用完全背包,动态转移方程是 f[j]=f[j]+f[j-prime[i]]。 代码: #include using namespace std; int n1,n,f[201]; int prime[47]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,
2017-12-13 15:48:09 456
原创 SSL_2278 Oliver的救援
题意: 从矩阵上的一个地方走到另一个地方,0表示路通,1表示走不通,求最少步数。 思路: 用广搜,深搜也可以。 代码: #include int n,a[1100][1100],state[1111000][3],x,y,px,py,best; short dx[5]={0,1,0,-1,0},dy[5]={0,0,1,0,-1}; char c; bool chec
2017-12-09 09:37:23 320
原创 SSL_2324 细胞问题
题意: 求一个矩阵里面有几个板块。 思路: 用广搜。搜到一个就清除周边连接的板块,然后统计个数。 代码: #include using namespace std; int ans,n,m,state[600][3]; char c; short dx[4]={1,-1,0,0},dy[4]={0,0,-1,1}; bool a[61][61]; void bf
2017-12-09 09:29:22 267
原创 SSL_2325 最小转弯问题
题目: 给出一张地图,这张地图被分为 n×m(n,m 思路: 用广搜,之后回溯统计转弯次数。 代码: #include int b,f,m,n,a[101][101],state[11000][3],s,father[11000],x,y,px,py,best; short dx[5]={0,1,0,-1,0},dy[5]={0,0,1,0,-1};
2017-12-08 21:16:19 379 1
原创 SSL_1194 最优乘车
题目: H城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。 一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路已士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一
2017-12-07 15:46:53 354
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人