主要就是加一个数组存储算过的数据 减少时间

#include <iostream>
using namespace std;
long int num[1005];
long int ff(int n){
    if(n==1||n==2){
        return n;
    }
    if(num[n-1]>0){
        num[n]=(2*num[n-1]+3*num[n-2]+n)%1000000007;
    }else{
        num[n]=(2*ff(n-1)+3*ff(n-2)+n)%1000000007;
    }
    return num[n];
}
int main()
{
    int n;
    num[1]=1;
    num[2]=2;
    while(1){
        cin>>n;
        if(n==0)break;
        cout<<ff(n)<<endl;
    }
}