zoukankan      html  css  js  c++  java
  • Codeforces 126D Fibonacci Sums 求n由随意的Sum(fib)的方法数 dp

    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/qq574857122/article/details/34120269

    题目链接:点击打开链接

    题意:

    给定一个数n

    问把这个数拆成多个不同样的fibonacci数

    有多少种拆法


    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<set>
    #include<queue>
    #include<vector>
    #include<map>
    using namespace std;
    #define ll __int64
    #define N 90
    ll n ,m;
    ll f[N], dp[N][2]; //dp[i][0]表示不拆分下标为i的数 dp[i][1]表示拆分下标为i的数
    vector<int>G;
    int main(){  
    	ll i, j, u, v, T; cin>>T;
    	f[1] = 1; f[2] = 2;
    	for(i=3;i<N;i++)f[i] = f[i-1] + f[i-2];
    	while(T--) {
    		G.clear();	cin>>n;
    		for(i = N-1; i; i--) {
    			if(f[i]<=n) {
    				G.push_back(i);
    				n -= f[i];
    			}
    		}
    		reverse(G.begin(), G.end());
    		dp[0][0] = 1;
    		dp[0][1] = (G[0]-1)>>1;
    		for(ll i = 1; i < G.size(); i++) {
    			dp[i][0] = dp[i-1][0] + dp[i-1][1];
    			dp[i][1] = dp[i-1][0] * ((G[i]-G[i-1]-1)/2) + dp[i-1][1] * ((G[i]-G[i-1])/2);
    		}
    		cout<<dp[G.size()-1][0]+dp[G.size()-1][1]<<endl;
    	}
    	return 0;
    }


查看全文
  • 相关阅读:
    「BZOJ4763」雪辉
    「CSA72」MST
    「CSA49」Bunny on Number Line
    「CSA49」Card Collecting Game
    Java indexOf() 方法
    MySQL执行计划分析
    NIO编程
    数据结构可视化
    深入理解二阶段提交协议(DDB对XA悬挂事务的处理分析)(一)
    linux下nohup日志切割方案
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10609582.html
  • Copyright © 2011-2022 走看看