POJ 3187 (Backward Digit Sums)

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

又是一道暴力枚举的题,还是next_permutation,

第一眼看是一道类似杨辉三角的题,以为要用公式把杨辉三角的表达式先列一个表再对应元素相乘,但是是事实并不需要列表,只需要一层一层向上计算时对元素的值进行动态处理。

ac代码:

#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

int main(void){
    int n,finaln;
    int a[12],b[12];
    scanf("%d%d",&n,&finaln);

    for(int i=0;i<n;i++)
        a[i]=i+1;

    do{
        for(int j=0;j<n;j++)    b[j]=a[j];

        for(int i=n-1;i>0;i--){
            for(int k=0;k<i;k++){
                b[k]=b[k]+b[k+1];     //动态处理元素的值
            }
        }
        if(b[0]==finaln)    break;
    }while(next_permutation(a,a+n));

    for(int i=0;i<n;i++)
        cout<<a[i]<<' ';
    cout<<endl;

    return 0;
}
View Code

18:57:08

2020-03-22

猜你喜欢

转载自www.cnblogs.com/jaszzz/p/12547670.html