#include<iostream>
using namespace std;
#define max_num 10000;
int dp[1024];
int mymin(int a,int b,int c,int d)
{
int min_num;
min_num=min(a,b);
min_num=min(min_num,c);
min_num=min(min_num,d);
return min_num;
}
int mymin2(int a,int b,int c)
{
int min_num;
min_num=min(a,b);
min_num=min(min_num,c);
return min_num;
}
int compute(int n)
{
int k;
k=1024-n;
for(int i=1;i<=k;i++)
{
dp[i]=max_num;
}
dp[1]=1,dp[2]=2,dp[3]=3;
dp[4]=1;
dp[16]=1;
dp[64]=1;
for(int i=4;i<=k;i++)
{
if((i-64)>0 )
{
dp[i]=mymin(dp[i-1]+1,dp[i-4]+1,dp[i-16]+1,dp[i-64]+1);
}
else if((i-16)>0)
{
dp[i]=mymin2(dp[i-1]+1,dp[i-4]+1,dp[i-16]+1);
}
else if((i-4)>0)
{
dp[i]=min(dp[i-1]+1,dp[i-4]+1);
}
}
return dp[k];
}
int main()
{
int n;
cin>>n;
cout<<compute(n)<<endl;
}
字节笔试题(动态规划)
最新推荐文章于 2024-05-19 21:45:25 发布
该代码实现了一个动态规划算法来计算给定整数n的某种特定序列的最小值。算法通过一个二维数组dp存储中间状态,并使用mymin和mymin2辅助函数找到每个位置的最小值。算法适用于寻找具有特定条件的最小子序列问题。
摘要由CSDN通过智能技术生成