以下是问题的链接: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))
答案 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;
}