网易有道2013校园招聘二面试题-项目安排[动态规划]



http://www.acmerblog.com/offer-163-1171.html
小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间不能有时间重叠,但是一个项目刚结束,就可以立即做另一个项目,即项目起止时间点可以重叠)。
这里按结束的时间先排序。(也可以按开始时间排序,遍历的次序需要颠倒一下)
===> there is problem in the code,
04int n;
05class P{
06public:
07    int st,ed,value;
08};
09P p[10001];
10int dp[10001]; //dp[i]安排前i个项目,最多能到得到的最大value
11bool cmp(const P & p1, const P & p2){
12    return p1.ed < p2.ed;
13}
14 
15int main(){
16    int n, i, j;
17    //freopen("in.txt", "r", stdin);
18    while(scanf("%d", &n) != EOF){
19        for(i=1; i<=n; i++){
20            scanf("%d %d %d", &p[i].st, &p[i].ed, &p[i].value);
21            dp[i] = 0;
22        }
23        sort(p+1, p+n+1, cmp); //按结束时间排序是重点
24        dp[0] = 0;
25        for(i=1; i<=n; i++){
26 
27            //查找最的j,可满足当前的i。都不满足就j=0
28            for(j=i-1; j>0; j--){
29                if(p[i].st >= p[j].ed)
30                    break;
31            }
32            dp[i] = dp[j] + p[i].value;
33            if(dp[i] < dp[i-1])
34                dp[i] = dp[i-1];
35        }
36        printf("%d\n",dp[n]);
37    }
38    return 0;
39}


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts