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