30分前来避坑
查看原帖
30分前来避坑
1037870
jianxing04楼主2024/1/20 20:54

这题其实是一个双重限定的完全背包,即每个数的四次幂不只用一次

#include<bits/stdc++.h>
using namespace std;
int sum[21],m,ans[21][100009];
int F(int x)
{
	return x*x*x*x;
}
int main()
{
	for (int i=1;i<=20;i++)
	{
		sum[i]=F(i);
	}
	cin>>m;
	for (int i=1;i<=20;i++)
	{
		for (int j=20;j>=1;j--)
		{
			for (int k=m;k>=sum[i];k--)
			{
				ans[j][k]=max(ans[j][k],ans[j-1][k-sum[i]]+sum[i]);
			}
		}
	}
	for (int i=1;i<=20;i++)
	{
		if (ans[i][m]==m)
		{
			cout<<i;
			break;
		}
	}
	return 0;
}

改成完全背包的写法就过了

2024/1/20 20:54
加载中...