uva 111 - History Grading
2014-02-27 15:13
274 查看
这题的提议很容易理解错,一开始按照他的sample int 和 out都无法推理出。
假设有A B C D四个事件,发生顺序 4 2 3 1 是指 第一个事件是第四个发生的,即 A事件是第四位发生,所以事件的发生顺序为 D B C A。
这题用动态规划的思想做,不过感觉自己写的不是很正宗。
假设有A B C D四个事件,发生顺序 4 2 3 1 是指 第一个事件是第四个发生的,即 A事件是第四位发生,所以事件的发生顺序为 D B C A。
这题用动态规划的思想做,不过感觉自己写的不是很正宗。
#include<iostream> using namespace std; int numevents[21]; int d[21]; //假设状态为d,即按照学生提供的事件顺序(不是他的那串输入数字),d[i]表示第i个数字能够达到的最长序列 int path[21]; int temp[21]; int maxdis; int n; int dis(int start){ if(d[start]>-1) return d[start]; for(int i=start+1;i<=n;i++){ if(numevents[path[start]]<numevents[path[i]]) if(d[start]<1+dis(i)) d[start]=1+dis(i); } if(d[start]>-1) return d[start]; d[start]=1; return d[start]; } int main(){ int m; cin>>n; for(int i=1;i<=n;i++){ cin>>m; numevents[i]=m; } while(cin>>m){ path[m]=1; d[1]=-1; for(int i=2;i<=n;i++){ cin>>m; path[m]=i; d[i]=-1; } maxdis=0; for(int i=1;i<=n;i++){ if(maxdis<dis(i)) maxdis=dis(i); } cout<<maxdis<<endl; } }
相关文章推荐
- UVa 111 History Grading (最长公共子序列)
- uva 111 History Grading
- UVa 111 History Grading (简单DP,LIS或LCS)
- UVA 111 History Grading(dp + LCS)
- uva-111 G - History Grading
- UVA - 111 History Grading
- UVA 111 - History Grading(动态规划)
- uva 111 - History Grading (dp, LCS)
- UVa 111: History Grading
- UVa 111 - History Grading
- uva 111 History Grading(动态规划——最长公共子序列)
- UVA - 111 History Grading
- UVA - 111 History Grading
- UVA 111 History Grading(题意杀,最长公共子序列)
- uva 111 History Grading(DP初步应用)
- UVA 111 History Grading
- uva 111 History Grading(lcs)
- UVA 111 History Grading
- UVa 111 - History Grading 最长递增子序列 LIS
- 序列代码UVa 111 History Grading (最长公共子序列)