UVA 11205 The broken pedometer

只要用哪几列就可以使P行都不同。暴力DFS就可以了。

#include<stdio.h>

#include<string.h>

int n, p;//n列 p行

int map[105][20];

int flaglie[20];

char s[105][20];

int sum;

void sou(int ans)

{

    int i, c = 0, j, flag = 0;

    if (ans == n)

    {

        for (i = 0; i < p; i++)

        {

            c = 0;

            for (j = 0; j < n; j++)

            {

                if (flaglie[j] == 1)

                {

                    s[i][c] = map[i][j] + '0';

                    c++;

                }

            }

            s[i][c] = '\0';

        }

        for (i = 0; i < p; i++)

        {

            for (j = i + 1; j < p; j++)

            {

                if (strcmp(s[i], s[j]) == 0)

                {

                    flag = 1;

                    break;

                }

            }

        }

        if (flag == 0) { if (c < sum)sum = c; }

        return;

    }

    flaglie[ans] = 1;

    sou(ans + 1);

    flaglie[ans] = 0;

    sou(ans + 1);

}

int main()

{

    int i, j, sb, bs;

    scanf("%d", &sb);

    for (bs = 0; bs < sb; bs++)

    {

        scanf("%d%d", &n, &p);

        sum = n;

        for (i = 0; i < p; i++)

        {

            for (j = 0; j < n; j++)

            {

                scanf("%d", &map[i][j]);

            }

        }

        sou(0);

        printf("%d\n", sum);

    }

    return 0;

}

 

你可能感兴趣的:(dom)