• 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;
    }


  • 相关阅读:
    React实现双数据绑定
    浏览器兼容
    关于postman
    前端常用插件、工具类库
    媒体查询总结
    Vue开发中可能会使用到的所有插件
    Vue+iView通过a标签导出文件
    类的内置方法
    单元测试
    面向对象的三大特性
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10609582.html
  • Copyright © 2020-2023  润新知