Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

一个比较简单的方法

Posted by cfanfrank at 2010-03-13 20:40:19 on Problem 2385
由于W的值 <= 30,比较小,所以这题可以用动态规划来做。
首先要把连续同一个数字一次处理。
dp[i] = {走了 i 次以后,得到的最大的苹果数目}。这个数组的大小为 W。
走了奇数次以后,一定位于树2下面。
走了偶数次以后,一定位于树1下面。
假设当前是在第 t 时刻掉了 cnt 个苹果下来。val 表示哪棵树掉的苹果,则执行下面的操作更新数组就可以了。
    if (val == 1) {
        for (i = 0; i <= min(t, W); i += 2)
            dp[i] += cnt;
        for (i = 1; i <= min(t, W); i += 2) 
            dp[i + 1] = max(dp[i + 1], dp[i] + cnt);
    } else {
        for (i = 1; i <= min(t, W); i += 2)
            dp[i] += cnt;
        for (i = 0; i <= min(t, W); i += 2)
            dp[i + 1] = max(dp[i + 1], dp[i] + cnt);
    }

详细代码可以参考这里,呵呵。
http://www.cppblog.com/varg-vikernes/archive/2010/03/13/109623.html

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator