一道完全背包的变形
题目链接
思路
首先我们预处理一下数据,四次方算到
18
18
18就够覆盖全部了
m
m
m是背包容量,单个数的四次方是物体体积,每个数的价值是
1
1
1
注意,这一题我们找的是最小的
n
n
n,所以初始化所有为极大数,完全背包板子改成
m
i
n
min
min
ACcode
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + 9;
int dp[M], s[M];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;cin >> n;
for (int i = 1;i <= 18;i++)s[i] = i * i * i * i;
for (int i = 1;i <= n;i++)dp[i] = 1e8;
for (int i = 1;i < 18;i++)
for (int j = s[i];j <= n;j++)
dp[j] = min(dp[j], dp[j - s[i]] + 1);
cout << dp[n];
return 0;
}