题解(跪求cookiebus 不要删除 )

06wuyanjun 2023-04-15 14:55:55 2023-10-05 16:02:40 18 返回题目

这是一道经典的dp题,当然也可以用贪心做,这里介绍这两种方法
1.dp
2.贪心

#include<bits/stdc++.h>      
using namespace std;                 
int f[1000010];               
int main()                    
{                
	int n;                
	cin>>n;              
	f[1]=1;                           
	for(int i=2;i<=n;i++)                 
	{                    
		if(i%2==0)f[i]=min(f[i/2],f[i-1])+1;               
		else f[i]=f[i-1]+1;                   
	}               
	cout<<f[n];                    
}  
//dp



#include<bits/stdc++.h>
using namespace std;
int ans=1;
void dfs(int n)
{
	if(n==1)return;
	else if(n%2==0)
	{
		ans++;
		dfs(n/2);
	}
	else ans++,dfs(n-1);
}
int main()
{
	int n;
	cin>>n;
	if(n==0)
	{
		cout<<0;
		return 0;
	}
	dfs(n);
	cout<<ans;
}
//贪心
{{ vote && vote.total.up }}