洛谷P4133 [BJOI2012]最多的方案(記憶化搜索)

題意

題目鏈接

求出把$n$分解為斐波那契數的方案數,方案兩兩不同的定義是分解出來的數不完全相同

Sol

這種題,直接爆搜啊。。。

打表后不難發現$<=1e18$的fib數只有88個

最先想到的應該是直接把$n$加入到搜索狀態里,然后枚舉能被分成哪些

但是這樣分解出來的數可能會有重復的,因此我們還要把當前考慮到第幾個數也加入到狀態里。

不難得到以下代碼

但是很顯然會T飛。

優化一下,只考慮當前的fib數對答案的貢獻,

也就是搜兩種情況:

1、用該數分解

2、不用該數分解

代碼是這樣的

然而還是會T飛。

繼續剪枝。

根據斐波那契的性質$\sum_{i = 1}^n f_i = f_{n+2} -1$

因此我們想要用前$ti - 1$個合成$x$,必須滿足$x < f_{ti+1}$。

然后就A了qwq

// luogu-judger-enable-o2
#include<cstdio>
#include<iostream>
#include<map>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second 
#define int long long
#define ull unsigned long long  
using namespace std;
const int MAXN = 1e5 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int f[MAXN], tot, lim, dp[MAXN], N;
map<Pair, int> mp;
int dfs(int x, int ti) {if(mp.find(MP(x, ti)) != mp.end()) return mp[MP(x, ti)];if(x == 0) return 1;int ans = 0;/*for(int i = ti; i >= 1; i--) {if(x - f[i] >= 0) ans += dfs(x - f[i], i - 1);//else break;}*/if(x - f[ti] >= 0) ans += dfs(x - f[ti], ti - 1);if(x < f[ti + 1]) ans += dfs(x, ti - 1);return mp[MP(x, ti)] = ans;
}
main() {lim = 1e18;f[1] = 1; f[2] = 2;for(int i = 3; i; i++) {f[i] = f[i - 1] + f[i - 2];if(f[i] > lim) {tot = i; break;}}N = read();//dp[0] = 1;cout << dfs(N, tot - 1);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537850.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos一鍵安裝redmine

官網給出的環境要求&#xff1a; http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements ------------------------------------------------------------------------------------------------------------- 下載一鍵安裝&#xff1a;&#xff08;下載…

大話php設計模式視頻,大話PHP設計模式

工廠模式用工廠方法或者類來實例化對象&#xff0c;而不是直接new。首先我們需要創建一個工廠類&#xff0c;比如Factory.php。如果不使用工廠模式的&#xff0c;我們需要一個對象的時候通常需要new Inexistence\girlfriend();然而我們一般不只在一個地方需要這個對象&#xff…

Git 2.19 對Diff、Branch和Grep等做了改進

\Git的最新版帶來了豐富的新功能以及內部更新&#xff0c;包括改進的diff、branch和grep&#xff0c;更好的命令行補全&#xff0c;新的range-diff命令等。\\Git diff現在可以正確地標記以intent-to-add參數添加的新文件路徑。intent-to-add可以和git add命令一起使用&#xff…

su oracle c expdp,expdp/impdp 數據泵導入導出

useridtest/test --導出的用戶&#xff0c;本地用戶!!directorydmpfile --導出的邏輯目錄&#xff0c;一定要在oracle中創建完成的&#xff0c;并且給用戶授權讀寫權限dumpfilexx.dmp --導出的數據文件的名稱&#xff0c;如果想在指定的位置的話可以寫…

Centos 升級GLIBCXX3.4.25

32位系統: http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc6_4.7.2-5_i386.deb 64位系統: wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc6_8.2.0-7_amd64.deb 其他版本 http://ftp.de.debian.org/debian/pool/main/g/ 解壓 ar -x libst…

美團點評基于MGR的CMDB高可用架構搭建之路【轉】

王志朋 美團點評DBA 曾在京東金融擔任DBA&#xff0c;目前就職于美團點評&#xff0c;主要負責金融業務線數據庫及基礎組件數據庫的運維。 MySQL Group Replication&#xff08;以下簡稱MGR&#xff09;&#xff0c;于5.7.17版本正式GA&#xff0c;由Oracle官方出品&#xff0c…

使用 redmind 進行項目任務管理

一、項目經理 1.1、新建任務(工單) 1.2、查看任務狀態 二、團隊成員 2.1、查看任務 作為這個團隊的成員之一&#xff0c;每天開工第一件事便是進入redmine查看“我的工作臺”中自己的任務 2.2、每日反饋任務完成狀態 1、每天開始工作時&#xff0c;及時將任務狀態從“新…

oracle11g創建表空間大文件,oracle11g創建表空間 sql語法

--oracle 11g創建有限制大小的永久表空間--create tablespace test--datafile F:\app\shan\product\11.2.0\dbhome_1\oradata\test.dbf size 1M--autoextend on next 2M maxsize 1024M;--修改表空間大小&#xff1a;--alter database datafile F:\app\shan\product\11.2.0\dbho…

內存泄漏優化

目錄介紹&#xff1a; 1.什么是內存泄漏2.內存泄漏造成什么影響3.內存泄漏檢測的工具有哪些4.關于Leakcanary使用介紹5.Leakcanary捕捉常見的內存泄漏及解決辦法 5.0.1 錯誤使用單例造成的內存泄漏5.0.2 錯誤使用靜態變量&#xff0c;導致引用后無法銷毀5.0.3 [常見]Handler使用…

redmine更換主題

主題列表&#xff1a;http://www.redmine.org/projects/redmine/wiki/Theme_List 雖然有很多主題&#xff0c;但是很多主題都是要錢的&#xff0c;像這類&#xff08;上圖&#xff09;沒有下載地址的&#xff0c;都是要錢的。 含GitHub的下載地址的&#xff0c;是免費可下載的&…

redmine 郵箱配置(阿里云+windows)

說明 密碼是第三方的授權碼&#xff0c;不是郵箱密碼 需要登錄126網頁版&#xff0c;在設置里開啟 smtp 等第三方服務&#xff0c;設置授權碼 阿里云Linux 默認屏蔽25號端口&#xff0c;所以需要開啟ssl&#xff0c;和使用 465 端口 重啟下 redmind sh /opt/redmine-3.4.6-…

linux查看當前用戶終端,Linux----基本命令的使用(vi命令,查看文件內容,顯示進程,切換用戶等)...

1、vi是linux系統上經常使用的一個文本編輯器&#xff0c;其有三種模式&#xff1a;命令模式、編輯模式(插入模式)、末行模式。命令模式——>編輯模式&#xff1a;“i a o I A O”linux編輯模式——>命令模式&#xff1a;“ESC”shell命令模式——>末行模式&#xff1…

centos6.8 環境一鍵安裝包 nginx配置thinkphp5

---恢復內容開始--- lnmp1.4 一鍵安裝包 nginx配置thinkphp5 環境&#xff1a;Nginx1.12.1 PHP5.6 Coentos6.8 修改網站配置文件 server{listen 443 ssl http2;#listen [::]:443 ssl http2;server_name xxx.cn;index index.html index.htm index.php default.html default.ht…

Linux下BitNami Redmine的插件安裝與更新

截至2017年3月27日&#xff0c;Redmine-3.3.2-2安裝以下的15款插件全部成功并通過測試&#xff08;下面顯示為插件正確文件夾名&#xff09;&#xff1a; easy_wbs redmine_ckeditor 提供所見即所得編輯器 redmine_graphs 提供部分問題圖表功能 progressive_projects_list 是…

linux 進程 讀寫鎖,linux 下實現高性能讀寫鎖(read/write lock)

前一篇文章分析了Windows slim read/write lock的工作原理。我們知道它的設計相當精妙&#xff0c;于是我們可以借鑒它的思路來設計linux下的讀寫鎖。在這個讀寫鎖的設計上&#xff0c;需要注意的是linux和windows有以下幾點區別&#xff1a;(1)windows使用的keyedevent機制需要…

Linux下redmine安裝插件報錯

報錯如下&#xff1a; There was an error parsing Gemfile: compile error - syntax error, unexpected :, expecting $end gem tzinfo-data, platforms: [:mingw, :x64_mingw, :mswin, :jruby]^. Bundler cannot continue. 原因是&#xff1a; redmine不同版本對ruby版本有…

ajax post 提交無法進入controller 請求200

最近寫js遇到個問題&#xff1a; 用ajax的post方式給后臺提交數據&#xff0c;頁面200&#xff0c;但是不進入controller 斷點&#xff0c;我以為我post參數不對。 網上查的&#xff1a; 1.說路徑不對&#xff0c;但是我通過get方式是可以進入的&#xff0c;路徑是沒問題的&…

cuda 編譯 linux,Linux下安裝Tensorflow源碼及編譯

下載Tensorflow源碼git clone https://github.com/tensorflow/tensorflow如果無法下載也可以在github上直接下載tensorflow的打包文件&#xff0c;這樣也能編譯&#xff0c;但是不能使用git命令可根據需要切換到不同的分支安裝bazel輸入以下命令echo "deb [archamd64] htt…

testflight進行用戶的beta測試

發發發轉載于:https://www.cnblogs.com/caimaomao/p/9681483.html

linux限制ping的時間,如何限制Linux命令程序運行的時間

Linux提供了大量的命令&#xff0c;每個命令都是唯一的&#xff0c;并且在特定的情況下使用。Linux的目標是幫助您盡可能地高效工作。Linux命令的一個屬性是時間限制。您可以為任何您想要的命令設置時間限制。如果時間過期&#xff0c;命令停止執行。在本教程中&#xff0c;您將…