2 条题解

  • 0
    @ 2026-7-12 15:44:19
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[20],f[N];
    int main()
    {
    	int n;scanf("%d",&n);int l=1;a[l]=1;
    	for(int i=6;i<=n;i*=6)a[++l]=i;
    	for(int i=9;i<=n;i*=9)a[++l]=i;
    	sort(a+1,a+l+1);int m=unique(a+1,a+l+1)-a-1;
    	f[0]=0;for(int i=1;i<=n;i++)f[i]=20;
    	for(int i=1;i<=m;i++)for(int j=a[i];j<=n;j++)
    		f[j]=min(f[j],f[j-a[i]]+1);
    	printf("%d\n",f[n]);return 0;
    }
    
    • 0
      @ 2026-5-31 9:16:26

      经典的完全背包 (动态规划)

      #include<bits/stdc++.h>
      using namespace std;
      const int INF = 0x3f3f3f3f;
      const int MAXN = 100005;
      int dp[MAXN];
      int main()
      {
         int N;
         cin >> N;
         memset(dp, 0x3f, sizeof(dp));
         dp[0] = 0;
         vector<int> coins;
         coins.push_back(1);
         long long power = 1;
         while(power<=N)
         {
         	    coins.push_back((int)power);
         	    power*=6;
         } 
         power = 1;
         while(power<=N)
         {
         	    coins.push_back((int)power);
         	    power*=9;
         } 
         for(int i = 1;i<=N;i++)
         {
         	    for(int j = 0;j<=coins.size();j++){
         	    	int w = coins[j];
         	    	if(w<=i){
         	    		dp[i] = min(dp[i], dp[i-w]+1);
      			   }
      		   }
         }
         cout << dp[N];
         return 0;
      }
      
      
      • 1

      信息

      ID
      11554
      时间
      2000ms
      内存
      256MiB
      难度
      9
      标签
      递交数
      13
      已通过
      5
      上传者