概述
描述
对于一个数列a1,a2......am,其中a1 = 1,am = n , a1 < a2 < ... < am-1 < am 对于每个k(2<=k<=m),ak=ai+aj (1 <= i, j <= k-1),现给定n的值,要求m的最小值.
输入输出格式
输入
整个测试有多组数据,每行一个数字N,N<=100,测试以数字零代表结束。
输出
输出有多行,每行一个数字,代表你的结果
输入输出样例
输入样例1
5
7
12
15
77
0
输出样例1
4
5
5
6
9
解题思路
咳咳,这道题和数列有点像(几乎一模一样)只需要注意换行(我当初没换爆了四次)再加一个while输入就行,所以,去看看数列吧,有思路的。
题解
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,ans=999999; 4 int dp[1001]; 5 void dfs(int dep,int pre) 6 { 7 int sum=-1; 8 int p=pre; 9 while(p<=n) 10 { 11 p*=2; 12 sum++; 13 } 14 if(dep+sum>=ans)return; 15 for(int i=dep-1;i>=1;i--) 16 { 17 for(int j=i;j>=1;j--) 18 { 19 int num=dp[i]+dp[j]; 20 if(num>pre&&num<=n) 21 { 22 dp[dep]=num; 23 if(num==n&&dep<ans) 24 { 25 ans=dep; 26 return; 27 } 28 dfs(dep+1,num); 29 } 30 } 31 } 32 } 33 int main() 34 { 35 while(cin>>n) 36 { 37 memset(dp,0,sizeof(dp)); 38 if(n==0)break; 39 ans=99999; 40 if(n<=2) 41 { 42 cout<<n<<endl; 43 } 44 else 45 { 46 dp[1]=1; 47 dp[2]=2; 48 dfs(3,2); 49 cout<<ans<<endl; 50 } 51 52 } 53 54 55 }
转载于:https://www.cnblogs.com/hualian/p/11164147.html
最后
以上就是香蕉钢笔为你收集整理的POJ 2248【加法链】描述 输入输出格式输入输出样例的全部内容,希望文章能够帮你解决POJ 2248【加法链】描述 输入输出格式输入输出样例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复