有个hint,计算w的时候,边界n<=300,但t处理要处理到t[301],以为要计算的是w[n]=w[n-1]+n*t[n+1]。

code:

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int t[350], w[350];

void ready()
{
t[1]=1;
for(int i=2; i<=304; i++)
t[i]=t[i-1]+i;
}

void ok()
{
for(int i=1; i<304; i++)
w[i]=i*t[i+1];
}

int main()
{
int n, c;
int sum;
ready();
ok();
while(scanf("%d", &n)!=EOF)
{
for(int i=1; i<=n; i++)
{
sum=0;
scanf("%d", &c);
for(int j=1; j<=c; j++)
sum+=w[j];
printf("%d %d %d\n",i, c, sum);
}
}
return 0;
}

 

posted on 2011-01-24 22:31  FreeAquar  阅读(270)  评论(0编辑  收藏  举报