zoukankan      html  css  js  c++  java
  • poj3187 Backward Digit Sums

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

    有一组数,对这组数相邻两个元素依次求和,求和得到新的一组数,反复执行这个操作,直到只剩下一个数。给出一个整数N和最终和,找到1~N的一种排列,使得这个排列在执行刚才所述操作后得到的数等于最终和。

    输入样例

    4 16

    输出样例

    3 1 2 4

    N的范围不大,最多为10,所以可以把1~N的所有排列枚举出来,然后依次执行三角形求和的操作,比较最后的结果。

    代码

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int a[11];
    
    int cal_adjacent_sum(int a[], int size){ //模拟三角形求和的过程
        int sum = 0; int g[11][11];
        for(int i = 0; i < size; ++i) g[0][i] = a[i];
        for(int i = 1; i < size; ++i){
            for(int j = 0; j < size-i; ++j) g[i][j] = g[i-1][j] + g[i-1][j+1];
        }
        return g[size-1][0];
    }
    
    int main(){
        int N, target;
        scanf("%d%d", &N, &target);
        for(int i = 1; i <= N; ++i) a[i-1] = i;
        do{
            if(cal_adjacent_sum(a, N) == target){
                for(int i = 0; i < N; ++i) printf("%d ", a[i]);
                printf("
    ");
                break;
            }
        }while(next_permutation(a, a+N));
        return 0;
    }
    
  • 相关阅读:
    第七周作业
    第六周作业
    第五周作业
    第四周作业
    第三周作业
    第二周作业
    第一周作业
    老鼠与盈利
    币值转换
    2015 USP-ICMC gym 100733 J. Summer Wars
  • 原文地址:https://www.cnblogs.com/patrolli/p/12173935.html
Copyright © 2011-2022 走看看