【洛谷p1464】 Function

中考第一天;

感觉我超废;

就是看这道题特别顺眼emmm

SOLUTION:

思路的话是开三维数组s[i][j][k],先三重for循环预处理出s[0~20][0~20][0~20]的w(a,b,c),然后直接搜索就好了。

Code:

#include<bits/stdc++.h>

using namespace std;

long long a,b,c;
long long s[21][21][21];

long long w(long long a,long long b,long long c){
    if(a<=0||b<=0||c<=0) return 1;
    if(a<b&&b<c) s[a][b][c]=s[a][b][c-1]+s[a][b-1][c-1]-s[a][b-1][c];
    else s[a][b][c]=s[a-1][b][c]+s[a-1][b-1][c]+s[a-1][b][c-1]-s[a-1][b-1][c-1];
    return s[a][b][c];
}

void ycl(){
    for(int i=0;i<=20;i++){
        for(int j=0;j<=20;j++){
            for(int k=0;k<=20;k++){
                s[i][j][k]=w(i,j,k);
            }
        }
    }
}

long long dfs(long long a,long long b,long long c){
    if(a<=0||b<=0||c<=0) return 1;
    if(a>20||b>20||c>20) return s[20][20][20];
    return s[a][b][c];
}


int main(){
    ycl();
    while(a!=-1||b!=-1||c!=-1){
        scanf("%lld %lld %lld",&a,&b,&c);
        if(a!=-1||b!=-1||c!=-1)
        cout<<"w"<<"("<<a<<", "<<b<<", "<<c<<") = "<<dfs(a,b,c)<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zhuier-xquan/p/11004647.html