题目地址

简要题意:

  输入两个数n和m,分别表示给你1——n这些整数,将他们按一定顺序摆成一行,按照杨辉三角的计算方式进行求和,求使他们求到最后时结果等于m的排列中字典序最小的一种。

思路分析:

  不难推得第一行为n个数a1\a2\……\an时求得的和为i=0∑n-1 ai*(n-1Ci) 根据此公式,考虑到数据量比较小,只需要将原本按递增顺序依次排列好的1——n按next_permutation给出的递增全排列顺序逐个代入,如果结果与m相等就停止循环即可。

参考代码:

  

 #include<stdio.h>
#include<cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int fact[],ncr[][],b[]={,,,,,,,,,};//先将1——n准备好
int main()
{
int i,j;
fact[]=fact[]=;//由于数据小,先预处理,计算好阶乘
for(i=;i<=;i++)
{
fact[i]=fact[i-]*i;
}
for(i=;i<=;i++)
{
for(j=;j<=i/;j++)
{
ncr[i][j]=ncr[i][i-j]=(fact[i]/(fact[j]*fact[i-j]));//计算各个组合数
}
}
int n,he,de;
scanf("%d%d",&n,&he);
n--;
if(n==)
printf("1\n");
else{
de=;
for(i=;i<=n;i++)//先判断一下初始递增的情况是否就满足,后面调用next_permutation貌似就直接从第二项开始了
{
de+=b[i]*ncr[n][i];
}
if(de==he)
{
for(i=;i<=n;i++)
{
printf("%d ",b[i]);
}
return ;
}
while(next_permutation(b,b+n+))//全排列
{
de=;
for(i=;i<=n;i++)
{
de+=b[i]*ncr[n][i];
}
if(de==he)
{
for(i=;i<=n;i++)
{
printf("%d ",b[i]);
}
break;
}
}
printf("\n");
}
return ;
}

(DFS、全排列)POJ-3187 Backward Digit Sums的更多相关文章

  1. POJ 3187 Backward Digit Sums 枚举水~

    POJ 3187  Backward Digit Sums http://poj.org/problem?id=3187 题目大意: 给你一个原始的数字序列: 3   1   2   4  他可以相邻 ...

  2. POJ 3187 Backward Digit Sums (dfs,杨辉三角形性质)

    FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N < ...

  3. poj 3187 Backward Digit Sums(穷竭搜索dfs)

    Description FJ and his cows enjoy playing a mental game. They write down the numbers to N ( <= N ...

  4. 穷竭搜索:POJ 3187 Backward Digit Sums

    题目:http://poj.org/problem?id=3187 题意: 像这样,输入N : 表示层数,输入over表示最后一层的数字,然后这是一个杨辉三角,根据这个公式,由最后一层的数,推出第一行 ...

  5. POJ 3187 Backward Digit Sums

    暴力DFS+验证. 验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理. #include<cstdio> #include<cstring& ...

  6. POJ 3187 Backward Digit Sums (递推,bruteforce)

    第1行j列的一个1加到最后1行满足杨辉三角,可以先推出组合数来 然后next_permutation直接暴. #include<cstdio> #include<iostream&g ...

  7. 【POJ - 3187】Backward Digit Sums(搜索)

    -->Backward Digit Sums 直接写中文了 Descriptions: FJ 和 他的奶牛们在玩一个心理游戏.他们以某种方式写下1至N的数字(1<=N<=10). 然 ...

  8. Backward Digit Sums(POJ 3187)

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5495   Accepted: 31 ...

  9. Backward Digit Sums(暴力)

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5664   Accepted: 32 ...

随机推荐

  1. python之路3:

    class set(object): """ set() -> new empty set object set(iterable) -> new set o ...

  2. JavaACOFramework的各个类介绍(part2 : Ant4AS类)

    package aco.ant; import java.util.ArrayList; import util.RouletteWheel;//引入轮盘类 import aco.ACO;//引入蚁群 ...

  3. 微信小程序-画布组件

    canvas 画布. 注: canvas 标签默认宽度300px.高度225px 同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的 ...

  4. 理解ASP.NET MVC中的HTML Helpers

    01 内联Html Helpers @helper listItems(string[] items) { <ol> @foreach (var item in items) { < ...

  5. PHP5.5.13 + Apache2.4.7安装配置流程详解

    ---恢复内容开始--- 自学PHP的这段时间里,真是倍感辛酸,相信广大的菜鸟们应该很我感同身受吧,在查阅了网上和众多数资料后,总结出来想当比较全面的安装方法,拿出来与广大的编程爱好者一起分享哈. 首 ...

  6. 为什么不要使用Response.Close()

    不要使用Response.Close()    不要使用Response.Close()    不要使用Response.Close()        1  因为:Close()方法会调用HttpWo ...

  7. session,ajax 跨域cookie

    什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来 ...

  8. Android的系统体系结构

    目录: Android的系统体系结构 Android的四种常用组件 Activity的启动流程 Android的系统体系结构 在入门了一个简单的Android的Hello World以后,我们首先来看 ...

  9. python操作csv和excel文件

    1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...

  10. php: 不能嵌套try-catch-fnally,否则执行时间过长

    php不能try-catch-fnally里面在嵌套try-catch-fnall,否则本来执行时间不长的程序,会被执行更长时间,这是php的bug吗? 如: try{ 代码块 }catch (\Ex ...