HDOJ 2037 今年暑假不AC解题报告
2011-07-31 21:27
459 查看
//#include <fstream> #include <memory> #include <algorithm> #include<iostream> using namespace std; struct Program { int start; int end; }; int cmp( const void *a , const void *b ) { struct Program *c = (Program *)a; struct Program *d = (Program *)b; if(c->start >d->start) return 1; else if(c->start <d->start) return -1; else return 0; } int MaxLength(int len,int* traceLength,int* trace,Program* p) { qsort(p,len,sizeof(Program),cmp); int max=0; for(int i=1;i<len;i++) { for(int temp=0;temp<i;temp++) { if(p[i].start>=p[temp].end) { if(traceLength[i]<traceLength[temp]) { trace[i]=temp; traceLength[i]=traceLength[temp]; } } } traceLength[i]++; if(traceLength[i]>traceLength[max]) max=i; } return max; } int main() { //fstream cin("今年暑假不AC.txt"); int len=0; while(cin>>len) { if(len==0) break; int* trace=new int[len]; int* traceLength=new int[len]; memset(traceLength,0,sizeof(int)*len); traceLength[0]=1; Program* program=new Program[len]; for(int i=0;i<len;i++) cin>>program[i].start>>program[i].end; int pos=MaxLength(len,traceLength,trace,program); cout<<traceLength[pos]<<endl; } return 0; }
总结与教训:
1、使用动态规划解题,直接将区间以开始点排序,然后将不重叠的点的最大值+1以记录就可以了。直接在循环中记录了最大点,更简洁。
相关文章推荐
- HDOJ 2037:今年暑假不AC 解题报告
- hdu 2037 今年暑假不AC 解题报告
- HD 2037 今年暑假不AC 解题报告
- hdu 2037 今年暑假不AC 解题报告
- HDOJ 2037之今年暑假不AC
- nyoj14会场安排问题VS hdoj2037今年暑假不AC(贪心之时间安排问题)
- HDOJ 2037 今年暑假不AC 【贪心】
- 贪心入门 ——HDoj 2037:今年暑假不AC。
- HDOJ 2037 今年暑假不AC
- hdoj 2037 今年暑假不AC
- HDOJ.2037 今年暑假不AC (贪心)
- HDOJ 2037 今年暑假不AC
- HDOJ 2037 今年暑假不AC
- hdoj problem 2037 今年暑假不AC(贪心(基础题+模板))
- 今年暑假不AC(解题报告)
- hdoj-2037-今年暑假不AC
- HDOJ 2037 今年暑假不AC
- “今年暑假不AC”解题报告
- HDOJ 2037 今年暑假不AC
- 【九度OJ】题目1434:今年暑假不AC 解题报告