zoukankan      html  css  js  c++  java
  • 穷竭搜索:POJ 3187 Backward Digit Sums

    题目:http://poj.org/problem?id=3187

    题意:

    像这样,输入N : 表示层数,输入over表示最后一层的数字,然后这是一个杨辉三角,根据这个公式,由最后一层的数,推出第一行的数字(由1~N组成)。如果有多个解,按字典序升序,输出第一个解。

    题解水题,不多说

    AC代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    using namespace std;
    
    int N, over;
    
    void solve()
    {
        int num[11][11];
        scanf("%d%d", &N, &over);
        
        for (int i = 1; i <= N; i++) {
            num[0][i - 1] = i;
        } 
        
        do {
            for (int i = 1; i < N; i++) {
                for (int j = 0; j < N - i; j++) {
                    num[i][j] = num[i - 1][j] + num[i - 1][j + 1];
                }
            }
    //        cout << "Debug: " << num[N - 1][0] << endl; 
            if (num[N - 1][0] == over) {
                break;
            }
        } while (next_permutation(num[0], num[0] + N));
        
        //本来就是按字典序来搜索的,根本不用考虑题目最后一个条件 →_→,直接输出第一行就可以 
        for (int i = 0; i < N; i++) {
            if (i != N - 1) {
                printf("%d ", num[0][i]);
            }
            else {
                printf("%d
    ", num[0][i]);
            }
        }
    }
    
    int main()
    {
        solve();
        
        return 0;    
    } 
  • 相关阅读:
    PHP获取指定的时间戳
    Elasticsearch
    git有用基本指令
    php中的json_decode
    有用的sql积累
    git submodule使用原理
    mysql重复插入时insert更改为update更新操作
    jpm
    awk 语句
    tomcat 发布简单的html网站
  • 原文地址:https://www.cnblogs.com/douzujun/p/8511511.html
Copyright © 2011-2022 走看看