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 · 553 阅读 · 0 评论 -
zju/zoj 1276 Optimal Array Multiplication Sequence(dp)
#include #include #define MIN(a,b) (a)<(b)?(a):(b) #define M 100 int position[M][M]; void putpath(int i,int j){ if( i>j) return ; if(po原创 2011-08-21 18:07:47 · 562 阅读 · 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 · 1195 阅读 · 0 评论 -
poj 1088 (dp记忆化搜索)
#include #define M 105 int 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 · 556 阅读 · 0 评论 -
UVA 111 最长公共子序列(以错乱序号)
#include #include #define M 21 int 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 · 677 阅读 · 0 评论 -
uva 103 (dp)Stacking Boxes
有什么问题可以Email skyzlxuan@gmail 或者直接留言,我都可以收到。 其实主要的思路就是用s[],数组保存排序后的数列。最后用最长上升子序列…… #include #include #include #include using namespace st原创 2011-08-23 11:53:23 · 638 阅读 · 0 评论 -
UVA 10405 Longest Common Subsequence
经典的DP, 本来可以开一个二维大数组的。 但是由于以前做过,现在再来做。。。 直接滚动数组水之(原谅我的无耻、、、) 还要注意,用scanf会Wa #include #include #include #include using namespace std; #de原创 2011-08-23 12:18:04 · 1320 阅读 · 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 #include using namespace std; const int maxn=12原创 2011-10-25 19:31:53 · 579 阅读 · 0 评论 -
zju 1986 Bridging Signals(最长上升非降子序列)
#include using namespace std; #define MAX_N 40001 int 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 · 484 阅读 · 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 1005 char str[MAXN][MAXN]; char fun[]={'a','b','c',原创 2012-04-24 22:11:00 · 1125 阅读 · 0 评论 -
hdu Doing Homework(dp位压缩)
#include #include using namespace std; #define MAXN 16 #define INF (1<<16)+2 char 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 · 726 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus(dp && 最大m子段和)
题意是输入m,n。 m为你要求的子段个数,n为数据个数。 由于是很早的题型了,但是理解起来还是很是无力。 并于是用了三天来搞懂此类问题。发现网上大多代码无思路整个过程。 就大致讲解一下DP的整个思路。 我们可以很清楚地得,这是一个顺序DP,由ix 那它原创 2011-08-19 14:29:43 · 4403 阅读 · 5 评论 -
zju/zoj 1459 String Distance and Transform Process
最长公共子序列+保存修改路径。 表示很无奈得记住了别人的代码,所以…… 题解出自:http://hi.baidu.com/gugugupan/blog/item/2e0d27e8dd6bf839b80e2df4.html 有时间自己会给出自己的理解和更详细的转移步骤。原创 2011-08-20 15:14:28 · 1089 阅读 · 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 · 799 阅读 · 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 · 970 阅读 · 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 · 578 阅读 · 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 · 517 阅读 · 0 评论 -
ZJU 1602 Multiplication Puzzle
#include #include #define M 101 using namespace std; /* 2588443 2011-07-20 22:40:30 Accepted 1602 C++ 0 188 ashione 题目解法: 当我们从最后一步去倒推的时候就原创 2011-07-20 22:45:39 · 549 阅读 · 0 评论 -
hdu 1513 使用滚动数组的最长公共子序列
#include #include using 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 · 880 阅读 · 0 评论 -
zju 1499 Increasing Sequences(分步动态规划)
#include #include #include using 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 · 1101 阅读 · 0 评论 -
hdu 1080 Human Gene Functions(类最长公共子序列)
初始化一定要做好。 不然就如此地悲剧, 刚开始我还是严格按照最长公子序来写的,比较的时候是满足条件再赋值。 谁知道它就是三个一起比较。 准备用Map来映射,一直出错,不得不采用如此蹩脚的代码了。 最后,还想用滚动数组来写,发现……,不能正确初始化。 算了,反正100的原创 2011-08-14 13:17:49 · 723 阅读 · 0 评论 -
zju 1234 Chopsticks (DP)
题解慢慢补充: 法一: 顺序Dp #include #include using 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 · 871 阅读 · 0 评论 -
poj 1141 Brackets Sequence(逆序DP)
《算法艺术与信息学竞赛》 P113~P115,注释掉的内容可以求得最少匹配完全数量。 path 表示的是在某个中间序列得到了较小的路径序号。 #include #include #include using namespace std; #define MAX_N 105 #原创 2011-08-16 12:31:04 · 486 阅读 · 0 评论 -
CF431C K-trees
常规的类最长子序列动态规划,原创 2014-07-01 10:02:47 · 773 阅读 · 0 评论
分享