较为复杂的动态规划整理
来源:互联网 发布:禁止 网络医疗平台 编辑:程序博客网 时间:2024/04/30 07:46
一、POJ 1191 棋盘分割
化简均方差的公式后发现,均方差的平方=(1/n)*(n个矩形总分平方的和)-平均值的平方。
f[k][x1][y1][x2][y2]表示将左上角坐标为(x1,y1)右下角坐标为(x2,y2)的矩形分割k次得到的总分平方和的最小值。
s[x1][y1][x2][y2]表示矩形(x1,y1)(x2,y2)总分的平方。
t1=min(f[k-1][x1][a][x2][y2]+s[x1][y1][x2][a-1], f[k-1][x1][y1][x2][a-1]+s[x1][a][x2][y2]);(y1+1<=a<=y2)//横向切割
t2=min(f[k-1][a][y1][x2][y2]+s[x1][y1][a-1][y2], f[k-1][x1][y1][a-1][y2]+s[a][y1][x2][y2]);(x1+1<=a<=x2)//纵向切割
f[k][x1][y1][x2][y2]=min(t1,t2);
二、POJ 1054 The Troublesome Frog
首先将各点按坐标从小到大排序,使表示点的结构体在数组中按从左上到右下的顺序排列。
f[i][j]表示以j到i的长度为一步的距离,从场外跳跃到点i的最大步数。(j<i)
显然,以该跳跃方式跳跃,点j的前一点p的坐标为( a[j].x-(a[i].x-a[j].x) , a[j].y-(a[i].y-a[j].y) ),点i的下一点n的坐标为( a[i].x+(a[i].x-a[j].x) , a[i].y+(a[i].y-a[j].y) )。
当p在场内且f[j][p]有值时,f[i][j]=f[j][p]+1;当p在场外时,f[i][j]=2;表示经过了i和j两个点。当n在场外时,ans=max(ans,f[i][j]);表示下一步能跳出场外,此时f[i][j]即一条路径的点数。
三、POJ 3208 Cheapest Palindrome
分析可知,添加字母c和删除字母c均可以使字符串成为回文串,因此选择其中花费最小的,对添加字母和删除字母的花费进行预处理,使cost[c]=min(add,del);
f[i][j]表示使s[i]到s[j]成为回文串的最小花费。
当s[i]!=s[j]时,可以添加或删除字符s[i],此时花费为f[i+1][j]+cost[s[i]] (比如 "caba" c[i]='c' c[j]='a' ,花费为使"aba"变为回文串的最小花费+在右侧添加一个'c'或删除左侧的'c'的花费 ),同理也可以添加或删除字符s[j],此时花费为f[i][j-1]+cost[s[j]]。
当s[i]==s[j]时,f[i][j]=f[i-1][j-1];表示无额外花费。
四,POJ 2948 Martian Mining
由题目可以看出,点(i,j)中的矿物向北或向西运送时不能中断,若(i,j)向北运送,则(k,j)(k<i)皆向北运送,向西同理。
令nor[i][j]表示将矿物(1,2,3...i,j)运往北边和。wes[i][j]表示将矿物(i,1,2,3...j)运往西边的和。
fnor[i][j]表示将(i,j)运往北边,此时从矩形(1,1)(i,j)能得到的最大矿物数。fwes[i][j]表示将(i,j)运往西边,此时从矩形(1,1)(i,j)能得到的最大矿物数。
fnor[i][j]=nor[i][j]+max( fnor[i][j-1] , fwes[i][j-1] ); fwes[i][j]=wes[i][j]+max( fwes[i-1][j] , fnor[i-1][j] );
ans=max( fnor[n][m] ,fwes[n][m] );
五,POJ 1925 Spiderman
Spiderman, Spiderman,
Does whatever a spider can
Spins a web, any size,
Catches thieves just like flies
Look Out!
Here comes the Spiderman.
=_= 一不小心就唱起来了
发现小虫每次跳跃前后横坐标是不变的。
令f[j]表示小虫荡到点i时的最小跳跃次数。
若以楼i为中心跳跃的话,小虫可以从区间j={k,x[i]-1}起跳,终点为x[i]*2-j,计算可知,(x[i]-k)*(x[i]-k)+(y[i]-y[1])*(y[i]-y[1])==y[i]*y[i]。
所以f[x[i]*2-j]=min(f[x[i]*2-j], f[j]+1);最后从x[n]<=i<=x[n]*2中找最小的f[i]即可。
六,POJ 3034 Whac-a-Mole
f[k][i][j]表示时间为k时锤子停在点(i,j)的情况下得到的最多分值,注意锥子可以落到场地外,而且锥子移动的直线上所有mole都会受到攻击-_-#(即(1,2)到(4,8),(2,4)(3,6)上的mole也会受到攻击)。
注意锤子的移动范围为d,即k-1时间锤子的位置(x,y)与k时间锤子的位置(i,j)的距离不能超过d。
- 较为复杂的动态规划整理
- 复杂状态的动态规划
- 【集合DP】复杂状态的动态规划
- 较为复杂的 Hibernate 数据映射
- 较为复杂的 Hibernate 数据映射
- 较为复杂的一个linq语句
- 较为复杂的表格样式Demo
- android一种较为复杂的布局
- android一种较为复杂的布局
- PKU 1451 较为复杂的模拟题
- BOX2D画出较为复杂的刚体
- 较为复杂的angular过滤,删除
- 动态规划的一些整理
- vijosp1037搭建双塔-较为清晰简单的思路-动态规划01背包-差值dp
- vijosp1037搭建双塔-较为清晰简单的思路-动态规划01背包-差值dp
- 人生规划较为理性的思考
- ajax较为复杂应用
- 对于动态规划的一些整理
- 安卓手机刷机常用名词解释
- Java Servlet 技术简介
- 类和对象的区别
- 使用Oracle触发器跟踪表数据的变化
- 多态和多态转型
- 较为复杂的动态规划整理
- 笔试中遇到的题
- hdu 2503
- 详解IOS SDK兼容性引导
- AndroidICS4.0---->LockScreen锁屏流程【Android源码解析九】
- 如何优化sencha性能
- telnet远程登入centos系统
- 算法策略的总结
- 正确使用PresentModalViewController