zoukankan      html  css  js  c++  java
  • POJ_1166_暴搜

    题目描述:

      有3*3的9个时钟,每个始终有0,1,2,3四种可以循环的状态码,每组数据给我们9个时钟的一种状态码。另外还有9种操作,分别使指定位置的时钟状态码加一,求使得9个时钟状态码全部置于0的最少操作数。

    思路:

      可以得知,每种操作数若执行了四次,则等同于不操作,所以每种操作数的次数在0-3之间,另外,题目明确告诉我们,每种状态只有一种答案。4^9,数据规模不大,把9种操作对应的位置存入一个数组,直接爆搜,也不用考虑什么情况。

      后来想了一下,这题应该可以用高斯消元做,效率可以提高很多。

      最后的输出格式多了一个空格,要处理的话比较麻烦,提交竟然AC了。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    int move[10][10] = {{},{0,1,1,0,1,1,},{0,1,1,1,},{0,0,1,1,0,1,1},{0,1,0,0,1,0,0,1,},{0,0,1,0,1,1,1,0,1,},
                        {0,0,0,1,0,0,1,0,0,1},{0,0,0,0,1,1,0,1,1,},{0,0,0,0,0,0,0,1,1,1},{0,0,0,0,0,1,1,0,1,1}};
    
    
    int main()
    {
        int a[10];
        for(int i = 1;i <= 9;i++)   cin >> a[i];
        int i1,i2,i3,i4,i5,i6,i7,i8,i9;
        for(i1 = 0;i1 <= 3;i1++)
        for(i2 = 0;i2 <= 3;i2++)
        for(i3 = 0;i3 <= 3;i3++)
        for(i4 = 0;i4 <= 3;i4++)
        for(i5 = 0;i5 <= 3;i5++)
        for(i6 = 0;i6 <= 3;i6++)
        for(i7 = 0;i7 <= 3;i7++)
        for(i8 = 0;i8 <= 3;i8++)
        for(i9 = 0;i9 <= 3;i9++)
        {
            int flag = 0;
            for(int j = 1;j <= 9;j++)
            {
                int sum = a[j];
                sum += i1*move[1][j]+i2*move[2][j]+i3*move[3][j]
                        +i4*move[4][j]+i5*move[5][j]+i6*move[6][j]
                        +i7*move[7][j]+i8*move[8][j]+i9*move[9][j];
                if(sum%4)
                {
                    flag = 1;
                    break;
                }
            }
            if(flag)    continue;
    
            while(i1--) cout << "1 ";
            while(i2--) cout << "2 ";
            while(i3--) cout << "3 ";
            while(i4--) cout << "4 ";
            while(i5--) cout << "5 ";
            while(i6--) cout << "6 ";
            while(i7--) cout << "7 ";
            while(i8--) cout << "8 ";
            while(i9--) cout << "9 ";
            cout << endl;
            return 0;
        }
    }
  • 相关阅读:
    CSS浮动(float、clear)通俗讲解
    JAVA 类的加载
    数据库操作 delete和truncate的区别
    正则表达式 匹配相同数字
    Oracle EBS OM 取消订单
    Oracle EBS OM 取消订单行
    Oracle EBS OM 已存在的OM订单增加物料
    Oracle EBS OM 创建订单
    Oracle EBS INV 创建物料搬运单头
    Oracle EBS INV 创建物料搬运单
  • 原文地址:https://www.cnblogs.com/zhurb/p/5836614.html
Copyright © 2011-2022 走看看