题目链接:https://ac.nowcoder.com/acm/contest/1110/L
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define maxn 100008
#define mod 1000000007
#define ll long long
using namespace std;
#define sc(x) scanf("%lld",&x)
ll a[maxn];
ll dp[maxn][5];
int min(int x, int y){
return x<y?x:y;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++)sc(a[i]);
dp[1][1]=a[1];
for(int i=2;i<=n;i++){
for(int j=1;j<=min(i,4);j++){
if(j==1)dp[i][j]=(dp[i-1][j]+a[i])%mod;
else dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*a[i]%mod)%mod;
}
}
printf("%lld\n",dp[n][4]);
memset(dp,0,sizeof(dp));
}
return 0;
}