码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4462

时间:2014-07-22 00:16:36      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:blog   os   io   for   re   c   

状态压缩

从讲完课开始写

一直写到三点

先是没有考虑结果可能为0(都能放置稻草人的空地)

再是

鬼使神差地把题目看错

N*N是指点数而不是小格数

最后

莫名其妙的多出了个break

完美的做大死

现在整个人处于一种要疯癫的状态

上代码

#include <iostream>
using namespace std;


int ABS(int a)
{
    return (a>0)?a:a*(-1);
}

int main()
{
    int N;
    cin>>N;
    while(N!=0)
    {
        int K;
        cin>>K;

        int *r = new int[K+1];
        int *c = new int[K+1];
        for(int i = 1; i < K+1; i++)
        {
            cin>>r[i]>>c[i];
        }

        int *R = new int[K+1];
        for(int i = 1;i < K+1; i++)
        {
            cin>>R[i];
        }

        int matrix[51][51]= {0};
        for(int i =1;i<N+1;i++)
        {
            for(int j = 1;j < N+1;j++)
            {
                matrix[i][j]=0;
            }
        }

        for(int i =1;i<K+1;i++)
        {
           matrix[r[i]][c[i]]=1;
        }

        int ans = 99999999;
        bool alrOk = true;
        for(int a = 1;a<N+1;a++)
        {
            for(int b =1;b<N+1;b++)
            {
                if(matrix[a][b]==0)
                {
                    alrOk = false;
                    break;
                }
            }
        }
        if(alrOk)
        {
            ans = 0;

        }


        for(int i = 0;i<=(1<<K)-1;i++)
        {
            int flag =0;
            bool ok = true;

            int grid[52][52] ={0};
            for(int e = 1;e<N+1;e++)
            {
                for(int f =1;f<N+1;f++)
                {
                    grid[e][f]=matrix[e][f];
                }
            }

            for(int j =0;j<K;j++)
            {
                if(i&(1<<j))
                {
                    flag++;
                    for(int a =1;a<N+1;a++)
                    {
                        for(int b =1;b<N+1;b++)
                        {
                            if(ABS(a-r[j+1])+ABS(b-c[j+1])<=R[j+1])
                            {
                               grid[a][b]=1;
                            }
                        }
                    }
                }
            }

            for(int a = 1;a<N+1;a++)
            {
                for(int b =1;b<N+1;b++)
                {
                    if(grid[a][b]==0)
                    {
                        ok = false;
                        break;
                    }
                }
           
            }
            if(ok)
            {
                ans = flag<ans?flag:ans;
                break;
            }
        }
        if(ans==99999999)
        {
            ans = -1;
        }
        cout<<ans<<endl;
        cin>>N;
    }

    return 0;
}

  

HDU 4462,布布扣,bubuko.com

HDU 4462

标签:blog   os   io   for   re   c   

原文地址:http://www.cnblogs.com/Run-dream/p/3858467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!