您的位置:首页 > 其它

POJ3187 Backward Digit Sums 枚举

2014-07-13 18:08 369 查看
这题比较简单,直接枚举
#ifndef HEAD
#include <stdio.h>
#include <vector>
#include <math.h>
#include <string.h>
#include <string>
#include <iostream>
#include <queue>
#include <list>
#include <algorithm>
#include <stack>
#include <map>

using namespace std;
#endif // !HEAD

char BDSVisited[11];
int BDSVALUE[11][11];
bool BDSFind = false;
void DFSB(int iDepth, int N, int M)
{
if (BDSFind)
{
return;
}
for (int i = 1; i <= N; i++)
{
if (BDSFind)
{
return;
}
if (BDSVisited[i] == 0)
{
BDSVALUE[1][iDepth] = i;
for (int j = 2; j <= iDepth;j++)
{
BDSVALUE[j][iDepth - j + 1] = BDSVALUE[j - 1][iDepth - j + 1] + BDSVALUE[j - 1][iDepth - j + 2];
}
if (BDSVALUE[iDepth][1] == M && iDepth == N)
{
BDSFind = true;
return;
}
if (BDSVALUE[iDepth][1] >= M)
{
continue;;
}
BDSVisited[i] = 1;
DFSB(iDepth + 1, N, M);
BDSVisited[i] = 0;
}
}
}

int main()
{
#ifdef _DEBUG
freopen("e:\\in.txt", "r", stdin);
#endif
int n, m;

scanf("%d %d\n", &n, &m);
memset(BDSVisited, 0, sizeof(BDSVisited));
memset(BDSVALUE, 0, sizeof(BDSVALUE));
BDSFind = false;
DFSB(1,n, m);
for (int i = 1; i <= n;i++)
{
printf("%d ", BDSVALUE[1][i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: