题解
2026-10-11 15:44:04
发布于:广东
2阅读
0回复
0点赞
#include<iostream>//即完全背包问题
using namespace std;
const int N=1e5+5;
int bag[2*N],f[N],n,r,w;//bag即可装入背包的物品表,f[i]表示取i元的最小次数
int main()
{
cin>>n;
bag[r++]=1;
w=6;
while(w<=n)
{
bag[r++]=w;
w*=6;
}
w=9;
while(w<=n)
{
bag[r++]=w;
w*=9;
}//因数值固定,可打表,代码不展示
for(int i=1;i<=n;i++) f[i]=N;//因使用min,所以要调成最大值(直接设为n也行,即最坏情况)
for(int i=0;i<r;i++)
{
for(int j=bag[i];j<=n;j++) f[j]=min(f[j],f[j-bag[i]]+1);//动态转移方程
}
cout<<f[n];
return 0;//养成好习惯!!!
}
若有问题,感谢指出!
这里空空如也

有帮助,赞一个