日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P1464 Function(递归式的记忆化搜索)

發(fā)布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1464 Function(递归式的记忆化搜索) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

傳送門

題目描述

對于一個遞歸函數(shù)w(a,b,c)w(a,b,c)w(a,b,c)
如果a≤0a≤0orb≤0b≤0orc≤0c≤0a \le 0a≤0 or b \le 0b≤0 or c \le 0c≤0a0a0orb0b0orc0c0就返回值11.
如果a>20a>20orb>20b>20orc>20c>20a>20a>20 or b>20b>20 or c>20c>20a>20a>20orb>20b>20orc>20c>20就返回w(20,20,20)w(20,20,20)w(20,20,20)
如果a&lt;ba&lt;ba&lt;ba&lt;ba<ba<b并且b&lt;cb&lt;cb&lt;cb&lt;cb<cb<c 就返回w(a,b,c?1)+w(a,b?1,c?1)?w(a,b?1,c)w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,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)w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)w(a?1,b,c)+w(a?1,b?1,c)+w(a?1,b,c?1)?w(a?1,b?1,c?1)
這是個簡單的遞歸函數(shù),但實現(xiàn)起來可能會有些問題。當a,b,ca,b,ca,b,c均為15時,調(diào)用的次數(shù)將非常的多。你要想個辦法才行.

/*
比如 w(30,-1,0)w(30,?1,0)既滿足條件1又滿足條件2
這種時候我們就按最上面的條件來算
所以答案為1
*/

輸入格式:
會有若干行。
并以-1,-1,-1結束。
保證輸入的數(shù)在[?9223372036854775808,9223372036854775807][-9223372036854775808,9223372036854775807][?9223372036854775808,9223372036854775807]之間,并且是整數(shù)。

輸出格式:
輸出若干行,每一行格式:
w(a,b,c)=answ(a, b, c) = answ(a,b,c)=ans
注意空格。

輸入樣例#1:
1 1 1
2 2 2
-1 -1 -1
輸出樣例#1:
w(1, 1, 1) = 2
w(2, 2, 2) = 4

分析

  • 這道題是一道比較基礎的記憶化搜索題目。依照題意,我們只需要開一個每一維都比20稍大的三維數(shù)組保存中間狀態(tài)的值,避免遞歸過程中大量的重復計算就可以解決這道題了。
  • 除此之外,因為數(shù)組下標不能為負,需要注意條件的判斷。避免使用為負值或者越界的下標。

代碼如下

import java.io.BufferedInputStream; import java.util.*; public class Main {static long ws[][][]=new long [25][25][25];static long w(int a,int b,int c) {if(a<=0 || b<=0 || c<=0)return 1;if(ws[a][b][c]==0) {if(a<b && b<c) ws[a][b][c]=w(a, b, c-1)+w(a, b-1, c-1)-w(a, b-1, c); else ws[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 ws[a][b][c];}public static void main(String[] args) {long a,b,c;Scanner cin=new Scanner(new BufferedInputStream(System.in));while(cin.hasNext()) {a=cin.nextInt();b=cin.nextInt();c=cin.nextInt();if(a==-1&&b==-1&&c==-1)break;if(a<=0 || b<=0 || c<=0) {System.out.println("w("+a+", "+b+", "+c+") = 1");}else if(a>20 || b>20 || c>20) {System.out.println("w("+a+", "+b+", "+c+") = "+w(20, 20, 20));}else {System.out.println("w("+a+", "+b+", "+c+") = "+w((int)a, (int)b, (int)c));}}cin.close();} }

總結

以上是生活随笔為你收集整理的P1464 Function(递归式的记忆化搜索)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。