震惊,一外国小伙苦做一题2小时不过,十分艰难,一小伙说出7个字,竟一语道破天机…………

事情是这样发生的,先上源代码(什么,你是被标题吸引来的,那是在对不起,看在我精心写出这个标题的份上给点打赏吧)


在第一眼看到这道题之后,你应该很蒙,无处下手
在做这道题之前,先来看另一道
贪心问题的典型代表(贪心又名往大的拿)
源代码十分简单

include<bits/stdc++.h>

using namespace std;
long long n,ans,a[30090],b[30090],ii,all;
int main()
{
cin>>n;
for(long long i=1;i<=n;++i)
{
cin>>a[i];
}
sort(a+1,a+n+1);
for(long long i=2;i<=n;i++)
{
a[i]+=a[i-1];
ans+=a[i];
sort(a+i,a+n+1);
}
cout<<ans;
return 0;
}
只要你接触过贪心算法,那么我相信你一定可以算出这道题的接法的
那么我们再把视线回到切割木板上,现在你应该恍然大悟了,因为这个题就是合并果子的变种,于是开开心心的修改代码,改出的代码如下


提交后结果如下

没错,超时了,,因为这组数据属实太大了,那现在我们要修改并优化一下代码,那我们要优化哪里呢
答案是:

sort

sort,一个神奇的函数,排序之王,时间是整个c++的程序猿掉光头发的极限之短,可次数多了,难免会有超时(所以代码是有极限的,越是想超越代码,就越是会被代码的弱点束缚住,所以,我不做代码了JOJO!)
现在是(琪亚娜)优化时间,其实优化说简单不简单,说难不难,只需要将前面的数字转移到后面即可(可能会遇见多重循环)
思路差不多是这样的,现在需要的只是些,以及搞清楚每个变量是干什么的,就像这样!

但写法却不止一种
还有一种写法如下

在这时现在我就要解说我的标题了,一开始我们是这么写的

请各位列文虎克们找一下差距,我想大家都看出来了吧
就在这一行

你可能在想:“哇,好离谱啊!这也可以错!”
但BUG可不分369等WA就是WA
啊……什么……不是WA?

有一说一,有时PA比WA更折磨人,因为鬼知道那是怎么对的,就会让人有:我代码思路是对的,但就仅仅是1点小BUG罢了
于是在剩下的时间中
我们从





要知道当时是晚上8点,大脑都迷糊了,bug十分难找
所以我们经历了太多太多,但就像一首古词写的

众人寻她千百度,蓦然回首,那人却在灯火阑珊处


一般,我发现了这个BuG
但是比AC更重要的是解题能力有提升了
什么,你还是不懂,那我再给你讲解一下这个代码
这个代码的灵魂就在于这个地方

就这么理解

关键是J,K这两个变量,这个双重循环跟sort比起来竟不会超时实属玄学
看到这里了,你可能会想这根贪心有什么关系呢,问得好


从这个角度看,分割模板反而最具有贪心算法的神韵

posted on 2020-08-22 09:48  O5  阅读(107)  评论(0编辑  收藏  举报