第一次看到这个题肯定是觉得比较简单,第一反应是用备忘录法,毕竟肯定重复的子问题很多。但是备忘录法确实写不出,干脆看了看《算法笔记》,给的方法确实让我无语且震撼
但是其实转念一想,计算子片段,比如第一个到第三个,其实就是第0个到第3个的和减去第0个到第1个的和。
#include<cstdio>
using namespace std;
int n;
double sum=0;
double add[100010];
int main(){
add[0]=0;
scanf("%d",&n);
for(int i =1;i<=n;i++){
scanf("%lf",&add[i]);
add[i]+=add[i-1];
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
sum+=(add[j]-add[i-1]);
}
}
printf("%.2lf",sum);
return 0;
}
思路是好的,但是后两个还是超时了。那就老实按照答案去做吧。。。