Description
Input
Output
Sample Input
1 1 1 2 2 2
Sample Output
24
题目描述
根据题目给定条件写出代码,重点是不超时
解题思路
首先根据题目描述,如果按照题目给定的书写,可以判定很容易就能超时
可以设立一个数组储存数字,一旦这组数算过了就直接输出
源代码
#include<bits/stdc++.h> using namespace std; int f[35][35][35]={{0},{0},{0}}; int m(int a,int b,int c) { if(f[a][b][c]>0) return f[a][b][c]; else { if(a<=0||b<=0||c<=0) return 1; else if(a<b&&b<c) { f[a][b][c]=(m(a,b,c-1)+m(a,b-1,c-1)-m(a,b-1,c)); return f[a][b][c]; } else { f[a][b][c]=(m(a-1,b,c)+m(a-1,b-1,c)+m(a-1,b,c-1)-m(a-1,b-1,c-1)); return f[a][b][c]; } } } int main() { int a,b,c; while(cin>>a>>b>>c) { if(a<=0||b<=0||c<=0) a=b=c=0; else if(a>20||b>20||c>20) a=b=c=20; cout<<m(a,b,c)<<endl; } }
题目的关键就在于缩短时间,而利于空间代替时间是acm里很常用的方法,使之不超时。