- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
解决这个 problem在 codechef 上:
After visiting a childhood friend, Chef wants to get back to his home. Friend lives at the first street, and Chef himself lives at the N-th (and the last) street. Their city is a bit special: you can move from the X-th street to the Y-th street if and only if 1 <= Y - X <= K, where K is the integer value that is given to you. Chef wants to get to home in such a way that the product of all the visited streets' special numbers is minimal (including the first and the N-th street). Please, help him to find such a product. Input
The first line of input consists of two integer numbers - N and K - the number of streets and the value of K respectively. The second line consist of N numbers - A1, A2, ..., AN respectively, where Ai equals to the special number of the i-th street. Output
Please output the value of the minimal possible product, modulo 1000000007. Constraints
1 ≤ N ≤ 10^5 1 ≤ Ai ≤ 10^5 1 ≤ K ≤ N Example
Input: 4 2 1 2 3 4.
Output: 8
可以使用基于此tutorial 的图 来解决我试图在不使用图表的情况下仅使用递归 和DP 来解决它。我的做法:
代码:
#include<iostream>
#include<cstdio>
#define LI long int
#define MAX 100009
#define MOD 1000000007
using namespace std;
LI dp[MAX]={0};
LI ar[MAX],k,orig;
void cal(LI n)
{
if(n==0)
return;
if(dp[n]!=0)
return;
LI minn=MAX;
for(LI i=n-1;i>=0;i--)
{
if(ar[n]-ar[i]<=k && ar[n]-ar[i]>=1)
{
cal(i);
minn=(min(dp[i]*ar[n],minn))%MOD;
}
}
dp[n]=minn%MOD;
return;
}
int main()
{
LI n,i;
scanf("%ld %ld",&n,&k);
orig=n;
for(i=0;i<n;i++)
scanf("%ld",&ar[i]);
dp[0]=ar[0];
cal(n-1);
if(dp[n-1]==MAX)
printf("0");
else printf("%ld",dp[n-1]);
return 0;
}
已经 2 天了,我已经检查了每个角落的案例和约束,但它仍然给出了错误的答案!解决方案有什么问题?
需要帮助。
最佳答案
分析
有很多问题。这是我发现的:
100009
的值。产品可以比那个高得多(这确实是问题只询问值模 1000000007
的原因)special number
差异为K
的街道移动,而问题陈述表明您可以在index
的任何城市之间移动> 差异不如 K
long int
太短。从所有这些问题中,最后一个是最严重的。我通过更改整个方法并使用更好的数据结构来修复它。
第一个问题
在您的 main()
函数中:
if(dp[n-1]==MAX)
printf("0");
在您的cal()
函数中:
LI minn=MAX;
您应该将此行替换为:
LI minn = std::numeric_limits<LI>::max();
不要忘记:
#include <limits>
第二个问题
for(LI i=n-1;i>=0;i--)
{
if(ar[n]-ar[i]<=k && ar[n]-ar[i]>=1)
{
. . .
}
}
您应该替换 for 循环条件:
for(LI i=n-1;i>=n-k;i--)
并完全删除特殊号码的条件。
第三个问题
你正在寻找特殊数乘积最小的路径。在您当前的设置中,您在取乘积的模后比较路径的乘积。这是错误的,因为较高数字的模数可能会变得非常低(例如,乘积为 1000000008
的路径的模数将为 1
,您将选择此路径,即使存在其乘积仅为 2
的路径)。
这意味着您应该比较真实的产品,而不是取模。由于这些产品可能会变得非常高,您应该取它们的对数。这将允许您使用简单的 double
比较产品。请记住:
log(a*b) = log(a) + log(b)
第四题
使用unsigned long long
。
第五题
我修复了所有这些问题并在 codechef CHRL4 上提交。除了一个测试用例,我接受了所有测试用例。未接受的测试用例是因为超时。这是因为您的算法的复杂度为 O(k*n)
。
您可以使用自下而上的动态规划方法实现 O(n)
复杂度,而不是自上而下,并使用将返回 k 的最小对数值的数据结构
以前的街道。您可以查找滑动窗口最小算法
来了解如何做。
引用资料
关于c++ - 在不使用图形的情况下以最小产品从第一个索引到最后一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314637/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!