上一页 1 ··· 9 10 11 12 13
摘要: DP水题。最长公共子序列,稍稍变形即可。模型完全一样。View Code 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 #define MAX 2012 5 int dp[MAX][MAX],v[200]; 6 char a[MAX],b[MAX]; 7 int main() 8 { 9 int n,i,j;10 while(cin>>n)11 {12 char ch;13 int value;14 memset(v,0,sizeo... 阅读全文
posted @ 2012-04-11 15:41 浙西贫农 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 这个题目是上个礼拜天上午看的,纠结了一上午啊,总算还是有点思路,但是总是感觉到相当的混乱,感觉被伤到了一样。后来想想不必就为这么一个题目纠结,换一个吧。但是不纠结是不可能的。最终,还是没忍住,看了一下人家的解题报告,发现思路大致上还是对的,但是,细节方面处理的很烂,琢磨了半天,几乎都要把人家的代码背下来了。今天早上一起来,就决心把这个伤到我的题目弄掉,但是,因为一个小小的BUG,弄了好一下,我算是明白了,写点代码还是老实点的好啊,免得因为一个BUG要调试半天。。现在说正题。题目的意思是,老板需要雇人干活,雇佣一个人需要钱h,每个月需要支付他工资s,解雇他还要给他"买断”,需要支付f的 阅读全文
posted @ 2012-04-10 20:25 浙西贫农 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你若干硬币,让你分成两份,使其绝对值之差尽量的小。很容易想到,我们需要枚举出这些硬币可能凑出的所有面值,那么,怎么去算出这些硬币可能凑出的面值就是我们需要解决的问题了。令dp[i]数组来保存是否可以凑出i的面值的结果。可以为1,否则为0.sum为这些硬币的面值之和。显然dp[0]=1,有一份一分钱都没有事肯定可以的。那么dp[sum]=1,有一份可以囊括所有的硬币。那么既然dp[0]是可以的,那么dp[0+coin[j]]也一定可以凑出来,同理dp[sum-coin[j]]也是可以的;如此推广下去,dp[coin[j]]可以,dp[coin[j]+coin[k]]也可以……………… 阅读全文
posted @ 2012-04-09 16:50 浙西贫农 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 简单的DP,跟那个白书上面的嵌套矩形的模型完全一样。记忆化搜索。本人写的时候还是小心翼翼的,因为练的不是很多。题目就是搬砖啊,搬砖。。。生来就是搬砖的命啊。View Code 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 class Block 5 { 6 public: 7 int l; 8 int w; 9 int h; 10 }; 11 int edg[40][3];//记录每一块砖头的规格 12 int g[100][100];//邻接矩阵 13 i... 阅读全文
posted @ 2012-04-06 21:14 浙西贫农 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 这个题吧,其实对很多人来说真的是水题,但是~~我把这个题AC掉了,真的是付出了蛮大的代价的。虽然AC掉了,但是,这个方案肯定不是最好的,特别是保存路径,我开了三维的数组。思路其实很简单,就是有点象枚举,状态转移方程应该是dp[i][j]=a[i][j]+min{dp[t][i+1]}(t为与i相邻的行,相邻的话稍微处理一下就可以了)这个题目要求一定是要按字典序最小输出路径,所以说最好应该是从后往前递推的,否则麻烦就大了,我就是在这个上面吃了苦头,一开始以为无所谓的,从哪边来都可以的,后来发现问题了,就动了大手术啊,调试就太悲催了,各种BUG啊。可见,写代码之前一定要想清楚了。这道题,还是体现了 阅读全文
posted @ 2012-04-05 23:14 浙西贫农 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 这个题吧,其实跟那些个硬币问题还是差不多的。但是。。本菜鸟在做的时候因为精度的问题吃到了大苦头了,这个就相当悲剧了。这个问题在代码中有具体的体现。View Code 1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int coin[12] = {0,5,10,20,50,100,200,500,1000,2000,5000,10000}; 5 long long int a[30001][12]; 6 int main() 7 { 8 int i,j,k,cent; 9 double 阅读全文
posted @ 2012-04-04 14:13 浙西贫农 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 本题吧,经典的DP。本菜鸟第一次写解题报告,以前的题都没好意思写。求高手别喷。题目意思应该还是很明白的。就是一根木头,告诉你多长,要切几下,分别切在哪些个点。然后呢,切一根多长的木头,就要多少钱。然后求一个最便宜的切木有的方案。这个题目是跟白书配套的,看过那个9.4的最优矩阵链乘的话,就能够想到,其实这个题思路跟那个矩阵链乘一样的。核心的东西就是这个方程:dp(i,j)=min{dp(i,k)+dp(k,j)+c[j]-c[i]}(其中(i<k<j),k也就是切断第i个点跟第j个点之间的那段木头的那个点)最后稍注意一下边界的条件,当i+1=j的时候,就是已经切到极限的时候,dp(i 阅读全文
posted @ 2012-04-03 22:17 浙西贫农 阅读(297) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13