这道就是相当于i表示x轴,sum[i]表示y轴,sum[i]表示前i个数的和
那么计算最小两点之间的距离
所谓的就是看了题解恍然大悟的题,就是算的时候先算的j->i的距离,
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; #define N 11111 ll a[N]; ll sum[N]; int ans; int main(){ int n; sum[0]=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("I64d",&a[i]); sum[i]=sum[i-1]+a[i]; } ans=a[2]*a[2]+1; for(ll i=1;i<n;i++){ if(i*i>ans) break;//so important ll t=ans; for(int j=i+1;j<=n;j++){ t=min(t,(sum[j]-sum[j-i])*(sum[j]-sum[j-i]); } ans=min(ans,t+i*i); } cout<<ans<<endl; }
codeforces 429D Tricky Function
原文:http://blog.csdn.net/u013076044/article/details/42403839