中考第一天;
感觉我超废;
就是看这道题特别顺眼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; }