1 条题解
-
0
问题分析
我们需要找到不超过给定整数的最大数,该数可以表示为立方数()和四面体数()的和。即:
其中:
• 是立方数,。
• 是四面体数,。
解决思路
-
预处理四面体数: • 由于,我们可以预先计算所有可能的四面体数,直到。
• 四面体数的计算公式为,我们可以通过循环计算,直到超过。
-
枚举立方数和四面体数的组合: • 对于每个输入,我们需要枚举所有可能的立方数,然后对于每个,检查是否存在四面体数使得。
• 对于每个,我们可以计算剩余值,然后在预处理的四面体数列表中找到不超过该剩余值的最大四面体数。
-
优化枚举范围: • 立方数的枚举范围是。
• 四面体数的枚举范围可以通过预处理确定,确保。
-
查找最大和: • 对于每个,找到最大的满足,然后计算。
• 最终结果是所有可能的中的最大值。
代码实现
#include<iostream> #include<algorithm> #include<stdio.h> #include<queue> #include<set> #include<map> #include<string> #include<memory.h> using namespace std; int main() { int n,i,j,x; int ans; while(~scanf("%d",&n)) { if(n==0) break; ans=0; for(i=0;i*i*i<=n;i++) { for(j=0;j*(j+1)*(j+2)/6<=n;j++) { x=i*i*i+j*(j+1)*(j+2)/6; if(x<=n) { ans=max(ans,x); } else { break; } } } printf("%d\n",ans); } return 0; }
-
- 1
信息
- ID
- 407
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者