我的SPOJ ACTIV解决方案有什么问题?

时间:2017-06-06 10:42:25

标签: java dynamic-programming

以下是问题的链接:SPOJ - ACTIV

我想出了问题的再现:

Dim dt As New DataTable
Using con As OleDbConnection New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\SmartshipG2.mdb"),
      cmd As New OleDbCommand("SELECT [acc_no] FROM [tblshipper] ORDER BY [acc_no]", con)
    con.Open()

    dt.Load(cmd.ExecuteReader())
End Using

cmbAccountNo.DataSource = dt
cmbAccountNo.DisplayMember = "acc_no"
cmbAccountNo.ValueMember = "acc_no"

其中next()找到活动的索引,其中包含当前活动的开始时间> =结束时间,而活动已按其开始时间的递增顺序排序。

这是我的java解决方案,虽然它传递了许多SPOJ工具包的测试用例,但它确实为某些人提供了WA。我的概念/解决方案有什么问题?

F(i) = 1+F(i+1)+F(next(activities[i].endtime))

1 个答案:

答案 0 :(得分:1)

您的代码可以超过long类型范围。您应该更频繁地投射到[0, mod)范围来执行计算。这应该足以解决您的问题并解决Spoj的问题:

for(int i=n-2;i>=0;i--)
{
    int idx = search(p,p[i].y,i,n-1);
    dp[i] = 1+dp[i+1]%mod;
    if(idx != -1)dp[i]=(dp[i]%mod+dp[idx]%mod)%mod;
}