上一页 1 ··· 8 9 10 11 12 13 下一页
摘要: DP写的,其过程比较艰难,贴一下代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 void add(char s1[],char s2[],char s3[]) 4 { 5 int len1 = strlen(s1); 6 int len2 = strlen(s2); 7 int a[10000]; 8 int k = len1 > len2 ? len1 : len2; 9 int i,j; 10 for(i = 0;i <= k;i++) 11 ... 阅读全文
posted @ 2012-04-29 21:32 浙西贫农 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 这个题目的题意的理解起来应该不苦难。这个人吃汉堡,有两种,一种吃下去要m分钟,另外一种吃下去要n分钟,给了t的时间如果他必须浪费时间,就要喝啤酒(注意题目后面有一句It is preferable that Homer drinks as little beer as possible),也就是说,在最好不要浪费时间的情况下,问他最多吃下去多少汉堡。所以就必须先来考虑时间,再来考虑吃下去汉堡的个数了。下面贴代码(当然,我写的好像有点罗嗦):View Code 1 #include <iostream> 2 #include <cstring> 3 using names 阅读全文
posted @ 2012-04-26 19:41 浙西贫农 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 水题痛彻我心扉,就这样。View Code 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a[14]; 6 int i,j,k,num = 2; 7 while(num <= 13) 8 { 9 if(num == 0)10 break;11 for(i = 1;;i++)12 {13 j = 0;14 k = num * 2;15 ... 阅读全文
posted @ 2012-04-20 23:11 浙西贫农 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 矩阵链乘,状态转移方程:dp(i,j)=min{dp(i,k)+dp(k+1,j)+a[i]*b[j]*b[k]}。这个题目主要就是要记录路径。做了那个ZOJ1463之后,这个应该不成问题。下面贴代码:View Code 1 #include <iostream> 2 using namespace std; 3 int dp[11][11],c[11][11],a[11],b[11],num; 4 void printans(int i,int j) 5 { 6 if(i == j) 7 { 8 cout<<"A"<<i; 9 }10 阅读全文
posted @ 2012-04-20 21:01 浙西贫农 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 这个题目,筷子应该最好是非降序排列的(只要输入的时候处理一下即可),这样处理起来就比较方便,因为这样就可以保证在后来的计算中,每取两个筷子都有比他们两根长的筷子,就可以符合题意了。下面贴代码:View Code 1 #include <iostream> 2 using namespace std; 3 int dp[5050][1010]; 4 #define maxn 1<<30 5 int a[5050]; 6 int main() 7 { 8 9 int ncase,guests,chopsticks,i,j;10 cin>>ncase;11 whi 阅读全文
posted @ 2012-04-19 15:45 浙西贫农 阅读(681) 评论(0) 推荐(0) 编辑
摘要: 题目本身,没什么好说的了。记得第一天练DP的时候就是叫我做的这个题,这个哪里做得出来啊。现在怎么说也比原来好点了。这个题实际上是跟POJ 1141是一样的,几乎一模一样。但是这个ZOJ太奇葩了,这个题目的输入让我无语了。后来我看了一下提交的结果。。提交了两千多次,没有PE,只有WA。。。这个就无语了,题目要求的那些空行让人凌乱啊。下面贴代码:View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int MA 阅读全文
posted @ 2012-04-18 17:42 浙西贫农 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 其实跟这个很像UVA的一个coins,但是那个是对每个硬币的使用次数没有限制,这次对这个有限制了。这个限制怎么去破他,我想了好久好久。最终,还是没想出来,悲剧。后来网上搜了一下,发现这题还是楼教主的“男人不容易”系列中“男人八题”里的最简单的一道。 悲催了。记录面值的话,每个面值搜过去就是了。但是这个次数的限制,就需要用另外一种状态去表示他了。最核心的就是这个式子:if(used[j-a[i]]<c[i]) used[j]=used[j-a[i]]+1贴代码:View Code 1 #include <iostream> 2 #include <cstring> 阅读全文
posted @ 2012-04-18 15:59 浙西贫农 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 这个题目拿到一看,马上就感觉又是带权的最长公共子序列的DP问题,觉得应该问题不大。真正动手一写,发现面对序列中不匹配的时候,处理起来好像很麻烦,一时没想到什么好办法。最后还是用的滚动数组绕开了原来的问题。下面贴代码:View Code 1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int a[101]; 5 double dp[101]; 6 int main() 7 { 8 int m,n,num,i,j; 9 double price;10 while(cin>>m 阅读全文
posted @ 2012-04-13 14:45 浙西贫农 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 第二次做自己学校OJ的题目,贡献了三个TLE,两个RE。。其实这是一道非常非常经典的DP题。题目的意思,在标程里面写的很清楚了:从数列中选取若干个数,使其和与M的差的绝对值最小。我开始想到的是那个分硬币的题。那种近乎暴力的方法,在这道题目上用,TLE了,因为这个数据的大小就是超了原来的想法,刚开始题目没看清楚,以为能过的。现在简述一下解决这个问题:从数列中选取若干个数,使其和与M的差的绝对值最小 的思路。我们用一个数组d[i][j]来表示/取到第i个数字时,在a[1],a[2]......,a[i]个中/任取若干个数/的和,使得/这个和/与j的差值/的绝对值/最小的时候/的这个差值。当i=0时 阅读全文
posted @ 2012-04-12 18:08 浙西贫农 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 还是水题。状态转移方程:dp(i,j)=min{dp(i,k)+dp(k,j)+a[i]a[j]a[k]}(i<k<j)。处理时注意边界即可。贴代码:View Code 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int d[101][101],a[101]; 5 int dp(int i,int j) 6 { 7 int &ans = d[i][j]; 8 int k,temp; 9 if(ans != -1)10 return ans;11 if(i... 阅读全文
posted @ 2012-04-11 18:14 浙西贫农 阅读(165) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 下一页