雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

排列数枚举——[Usaco2006 Feb]Backward Digit Sums

Posted on 2011-11-17 21:28  huhuuu  阅读(317)  评论(0编辑  收藏  举报

http://www.zybbs.org/JudgeOnline/problem.php?id=1653

STL组合数枚举下

算总和的话其实就是杨辉三角

View Code
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[19];
int b[19];

int s[19][19];

void fun()
{
int i,j;
memset(s,0,sizeof(s));
for(i=1;i<=10;i++)
{
s[i][i]=1;
s[i][1]=1;
}

for(i=3;i<=10;i++)
{
for(j=2;j<i;j++)
{
s[i][j]=s[i-1][j]+s[i-1][j-1];
}
}
}

int main()
{
int n,m;
fun();

while(scanf("%d%d",&n,&m)!=EOF)
{
int i;
for(i=1;i<=n;i++)
{
a[i]=i;
}

do
{
int sum=0;
for(i=1;i<=n;i++)
sum+=a[i]*s[n][i];

if(sum==m)
{
break;
}
}while(next_permutation(&a[1],&a[n+1]));

printf("%d",a[1]);
for(i=2;i<=n;i++)
{
printf(" %d",a[i]);
}
printf("\n");
}

return 0;
}


STL组合数注意下限