Poj百练 2810:完美立方 (分类:枚举)

这是一道经典的枚举优化问题,体现了前缀和预处理思想。

经过总结,枚举的优惠大致有以下几点:

1.通过数学知识,自然判断等人为的缩小某些一定不会发生的范围

2.找出题中的自然联系,如生理周期问题每找到一个周期后迭代周期之积即可

3.前缀和预处理,对于枚举中多次使用的数据提前计算出来,如完美立方问题对立方的预处理

//poj2180完美立方
#include <iostream>
#include<cstdio>
using namespace std;

//这是一道经典的枚举问题,体现了前缀和的预处理思想
int main()
{
    int n;
    scanf("%d",&n);
    int cube[n+1];
    //前缀和预处理
    for(int i = 1; i <= n; i++)
        cube[i] = i*i*i;

    for(int i = 6; i <= n; i++){
        //通过简单数学知识可以缩小范围
        /*1.a最小为6
          2.1不会被使用
          3.b, c, d的小于a*/
        for(int j = 2; j < i; j++)
            for(int k = j; k < i; k++)
                for(int l = k; l < i; l++)
                    if(cube[j]+cube[k]+cube[l] == cube[i]){
                        printf("Cube = %d, Triple = (%d,%d,%d)\n", i, j, k, l);
                    }
        a: ;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/81480761
今日推荐