Function(洛谷-P1464)
生活随笔
收集整理的這篇文章主要介紹了
Function(洛谷-P1464)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
對于一個遞歸函數w(a,b,c)
如果a<=0 or b<=0 or c<=0就返回值1.
如果a>20 or b>20 or c>20就返回w(20,20,20)
如果a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)
其它別的情況就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)
這是個簡單的遞歸函數,但實現起來可能會有些問題。當a,b,c均為15時,調用的次數將非常的多。你要想個辦法才行.
輸入輸出格式
輸入格式:
會有若干行,并以-1,-1,-1結束,保證輸入的數在-9223372036854775808~9223372036854775807之間,并且是整數
輸出格式:
輸出若干行
格式:[b]w(a,_b,_c)_=_你的輸出(_代表空格)[/b]
輸入輸出樣例
輸入樣例#1:?
1 1 1 2 2 2 -1 -1 -1輸出樣例#1:?
w(1, 1, 1) = 2 w(2, 2, 2) = 4源代碼??
#include<iostream> using namespace std; long int w(long int a,long int b,long int c); long int result[30][30][30]={0};int main() {long int num[100][3];long int a,b,c;int i;for(i=0;;i++){cin>>num[i][0]>>num[i][1]>>num[i][2];//輸入函數if( num[i][0]==-1 && num[i][1]==-1 && num[i][2]==-1 )break;}for(i=0;;i++){a=num[i][0]; b=num[i][1]; c=num[i][2];if(a>20) a=21;//大于20時,返回20if(b>20) b=21;//大于20時,返回20if(c>20) c=21;//大于20時,返回20if( a==-1 && b==-1 && c==-1 )//均為-1時break;//終止循環else//按要求輸出cout<<"w("<<num[i][0]<<", "<<num[i][1]<<", "<<num[i][2]<<") = "<<w(a,b,c)<<endl;}return 0; }long int w(long int a,long int b,long int c) {if( a<=0 || b<=0 || c<=0 )//小于0時return 1;//返回1else if(result[a][b][c]!=0)//不等于0時return result[a][b][c];//返回當前值else if( a>20 || b>20 || c>20 )//任意一參數大于20時return w(20,20,20);//返回20else if( a<b && b<c )//a<b并且b<c時{result[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);return result[a][b][c];}else//其他情況{result[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);return result[a][b][c];} }總結
以上是生活随笔為你收集整理的Function(洛谷-P1464)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛C++语言:奇数统计与输出
- 下一篇: 晶晶赴约会(信息学奥赛一本通-T1049