UVA 10405 Longest Common Subsequence
摘要:和UVA 111几乎一模一样,不同的是它读入的是char,注意一下空格的问题就行了。虽然上次是抄的,这次就能自己写了。 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int MAX = 1005; 5 char a[MAX],b[MAX]; 6 int dp[MAX][MAX]; 7 int main() 8 { 9 int la,lb,i,j;10 while(cin.getline(a,MAX))11 {12 cin.getline(b,MAX);1...
阅读全文
UVA 103 Stacking Boxes
摘要:终于完成了啊,这可是我自己独立做的第一道DP题!激动ing……这题在白书里是DAG上的DP,可是我看不懂,比如怎么建图我就不会,所以代码都是自己想的。图我不会建,只好动下脑子,刚开始是想用二维数组保存数据的,后来改成了结构体。整个程序我还算满意。View Code 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 const int MAXM = 32; 5 const int MAXN = 12; 6 int m,n,dp[MAXM]; 7 typedef struct Box
阅读全文
UVA 111 History Grading
摘要:这是我做的第一道DP题,感觉DP很像递归,关键是找出递推关系。代码就不上了,基本是抄的。 这题的状态转移方程为:dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);//a[i] != b[j] dp[i+1][j+1] = dp[i][j] + 1;//a[i] == b[j] 其中,dp[i][j]表示第一行取前i个数,第二行取前j个数时的最大值,当且仅当两行最后的数相等时最大值增加1。
阅读全文