
ACM水题之路-动态规划
文章平均质量分 57
a342374071
这个作者很懒,什么都没留下…
展开
-
HDU 1160 FatMouse's Speed
#include #include /* ashione 2011-6-15 DP类似于最长递增子序列,只不过最重要的就是保存路径由题意可以得出,作为自身就是一个序列(长度为1的),那么我们下面定义的就是 f[1...n]=1 说的就是这个;这个用fill_n()函数来初始化它,注:memset()是按位初始化。max 表示它的最长序列,p指向它最长序列的最后一个元素,原创 2011-06-15 14:46:00 · 532 阅读 · 0 评论 -
zju/zoj 1276 Optimal Array Multiplication Sequence(dp)
#include#include#define MIN(a,b) (a)<(b)?(a):(b)#define M 100int position[M][M];void putpath(int i,int j){ if( i>j) return ; if(po原创 2011-08-21 18:07:47 · 539 阅读 · 0 评论 -
hdu 1505 /hdu 1506(最大子矩阵)
题意都是求最大子矩阵和。自己用O(n^3)的算法,直接给我无情的TLE (T..>随后看到了这个位置迭代算法。left[i] 表示在第i号元素的左边从left[i]至i中, elem[j] >= elem[i] ( left[i]同理可得,用right[i]表示在原创 2011-08-22 19:50:07 · 1158 阅读 · 0 评论 -
poj 1088 (dp记忆化搜索)
#include#define M 105int dp[M][M],a[M][M],n,m,step[8]={0,1,0,-1,1,0,-1,0};int solve(int i,int j){ if(dp[i][j] || i>n || im || j<1)原创 2011-08-22 21:49:05 · 535 阅读 · 0 评论 -
UVA 111 最长公共子序列(以错乱序号)
#include#include#define M 21int a[M],b[M],n,t;bool count(){ int i=1; while(i<=n && ~scanf("%d",&t)){ b[t]=i;i++; } if(i==n+1)原创 2011-08-21 20:42:50 · 656 阅读 · 0 评论 -
uva 103 (dp)Stacking Boxes
有什么问题可以Emailskyzlxuan@gmail或者直接留言,我都可以收到。其实主要的思路就是用s[],数组保存排序后的数列。最后用最长上升子序列……#include#include#include#includeusing namespace st原创 2011-08-23 11:53:23 · 619 阅读 · 0 评论 -
UVA 10405 Longest Common Subsequence
经典的DP,本来可以开一个二维大数组的。但是由于以前做过,现在再来做。。。直接滚动数组水之(原谅我的无耻、、、)还要注意,用scanf会Wa#include#include#include#includeusing namespace std;#de原创 2011-08-23 12:18:04 · 1280 阅读 · 0 评论 -
zju 2972 Hurdles of 110m(简单的DP)
08年的省赛题。dp[i][j] 表示的是第i部分还有 j 份force 的最小时间。dp[i][j] = min( dp[i-1][j+f1] +t1, dp[i-1][j]+t2,dp[i-1][j-f2]+t3) 同时也要满足条件。 j 代码:#include#include#includeusing namespace std;const int maxn=12原创 2011-10-25 19:31:53 · 558 阅读 · 0 评论 -
zju 1986 Bridging Signals(最长上升非降子序列)
#includeusing namespace std;#define MAX_N 40001int dp[MAX_N],bridge[MAX_N];int main(){ int T,n,i,j; cin>>T; while(T--){ cin>>n; for(i=1;i<=n;i++) cin>>bridge[i]; dp[1]=bridge[1]; in原创 2011-08-14 10:35:54 · 468 阅读 · 0 评论 -
hdu 2870 Largest Submatrix
hdu1505/hdu1506最大子矩阵#include #include #include using namespace std;/*ashione 2012-4-24最大子矩阵变形,枚举a,b,c即可。l,r的最大距离操作参照hdu1505.*/#define MAXN 1005char str[MAXN][MAXN];char fun[]={'a','b','c',原创 2012-04-24 22:11:00 · 1088 阅读 · 0 评论 -
hdu Doing Homework(dp位压缩)
#include #include using namespace std;#define MAXN 16#define INF (1<<16)+2char sname[MAXN][MAXN<<3];int cost[MAXN],deadline[MAXN];int time[INF],delay[INF],now[INF],pre[INF]; //time表示当前状态的时间,原创 2012-04-26 20:26:01 · 698 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus(dp && 最大m子段和)
题意是输入m,n。m为你要求的子段个数,n为数据个数。由于是很早的题型了,但是理解起来还是很是无力。并于是用了三天来搞懂此类问题。发现网上大多代码无思路整个过程。就大致讲解一下DP的整个思路。我们可以很清楚地得,这是一个顺序DP,由ix那它原创 2011-08-19 14:29:43 · 4347 阅读 · 5 评论 -
zju/zoj 1459 String Distance and Transform Process
最长公共子序列+保存修改路径。表示很无奈得记住了别人的代码,所以……题解出自:http://hi.baidu.com/gugugupan/blog/item/2e0d27e8dd6bf839b80e2df4.html有时间自己会给出自己的理解和更详细的转移步骤。原创 2011-08-20 15:14:28 · 1053 阅读 · 0 评论 -
ZJU 1149 & HDU 1049 Dividing (多重背包)
#include#include#includeusing namespace std;int num[7],pack[150001],sum;#define max(a,b) ((a))>((b))?(a):(b)// ashione 2011-6-15 ——多重背包问题,详情见背包九讲bool init(){ sum=0; for(int i=0;i<6;原创 2011-06-15 23:58:00 · 778 阅读 · 0 评论 -
HDU 1081 To The Max
#includeusing namespace std;#define M 100#define LIMIT -128/* ashione 2011-6-18 HDU 1081 简单DP这个题的状态转移方程不好解释。就是前面 || num[i][j]代表第i行前j个数据的和 || ,其它的不像DP。那么又num[i][j] 可得 sum[k][1ong]=num原创 2011-06-18 17:57:00 · 950 阅读 · 0 评论 -
HDU 1421 搬寝室
#include#includeusing namespace std;/* 先对n中物品的重量排序 令dp[i][j]表示前i个物品中选j对的最小疲劳度。 则dp[i][j]可能含有第i个物品(这种情况下,第i种物品一定是和第i-1个物品配对), 则dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1])原创 2011-06-24 20:36:00 · 561 阅读 · 0 评论 -
HDU 2845 Beans
#include#includeusing namespace std;#define MAX(a,b) (a)>(b)?(a):(b)#define M 2001int Count[M][M];//4090888 2011-06-25 21:03:05 Accepted 2845 156MS 7864K 734 B C++ ashione/*分别对横竖求最大非原创 2011-06-25 21:16:00 · 494 阅读 · 0 评论 -
ZJU 1602 Multiplication Puzzle
#include#include#define M 101using namespace std;/*2588443 2011-07-20 22:40:30 Accepted 1602 C++ 0 188 ashione 题目解法:当我们从最后一步去倒推的时候就原创 2011-07-20 22:45:39 · 527 阅读 · 0 评论 -
hdu 1513 使用滚动数组的最长公共子序列
#include#includeusing namespace std;#define MAX_N 5002#define MAX(a,b) (a)>(b)?(a):(b)char s[MAX_N],t[MAX_N];int dp[2][MAX_N];int原创 2011-08-14 12:14:50 · 851 阅读 · 0 评论 -
zju 1499 Increasing Sequences(分步动态规划)
#include#include#includeusing namespace std;#define MAX_N 100#define max(a,b) (a)>(b)?(a):(b)int leftdp[MAX_N],rightdp[MAX_N];char s原创 2011-08-15 17:40:07 · 1062 阅读 · 0 评论 -
hdu 1080 Human Gene Functions(类最长公共子序列)
初始化一定要做好。不然就如此地悲剧,刚开始我还是严格按照最长公子序来写的,比较的时候是满足条件再赋值。谁知道它就是三个一起比较。准备用Map来映射,一直出错,不得不采用如此蹩脚的代码了。最后,还想用滚动数组来写,发现……,不能正确初始化。算了,反正100的原创 2011-08-14 13:17:49 · 700 阅读 · 0 评论 -
zju 1234 Chopsticks (DP)
题解慢慢补充:法一:顺序Dp#include#includeusing namespace std;#define MAX_N 5001#define Min(a,b) (a)<(b)?(a):(b)int dp[2][MAX_N],Dischop[MAX原创 2011-08-17 18:34:20 · 844 阅读 · 0 评论 -
poj 1141 Brackets Sequence(逆序DP)
《算法艺术与信息学竞赛》 P113~P115,注释掉的内容可以求得最少匹配完全数量。path 表示的是在某个中间序列得到了较小的路径序号。#include#include#includeusing namespace std;#define MAX_N 105#原创 2011-08-16 12:31:04 · 469 阅读 · 0 评论 -
CF431C K-trees
常规的类最长子序列动态规划,原创 2014-07-01 10:02:47 · 745 阅读 · 0 评论