zoukankan      html  css  js  c++  java
  • HDU4462稻草人

    l问题描述:有一块N*N的玉米田(N<=50),给定K个(X,Y)的坐标位置(K<=10)和相应的覆盖范围,请问,至少在这K个位置中选择几个放置稻草人,能保证玉米田全被覆盖?
     
     
     1 #include<stdio.h>
     2 #include<cstring>
     3 #include<iostream>
     4 
     5 using namespace std;
     6 
     7 int field[52][52];
     8 int N,K;
     9 
    10 struct Node{
    11     int x,y,r;
    12 }node[11];
    13 
    14 int abs(int a)
    15 {
    16     return a<0?-a:a;
    17 }
    18 
    19 void getField(int k)
    20 {
    21     for(int i=1;i<=N;i++)
    22     {
    23         for(int j=1;j<=N;j++)
    24         {
    25             if(abs(node[k].x-i)+abs(node[k].y-j)<=node[k].r) field[i][j]=1;
    26         }
    27     }
    28 }
    29 
    30 bool check()
    31 {
    32     for(int i=1;i<=N;i++)
    33     {
    34         for(int j=1;j<=N;j++)
    35         {
    36             if(field[i][j]==0) return false;
    37         }
    38     }
    39     return true;
    40 }
    41 
    42 int main()
    43 {
    44     while(scanf("%d",&N)&&N!=0){
    45         scanf("%d",&K);
    46 
    47         int ans=20;
    48 
    49         for(int i=1;i<=K;i++){
    50             scanf("%d%d",&node[i].x,&node[i].y);
    51         }
    52         for(int i=1;i<=K;i++){
    53             scanf("%d",&node[i].r);
    54         }
    55 
    56         int flag=0,count;
    57         while(flag<(1<<K)){
    58             memset(field,0,sizeof(field));
    59             for(int i=1;i<=K;i++){
    60                 field[node[i].x][node[i].y]=1;
    61             }
    62             count=0;
    63             for(int i=0;i<K;i++)
    64             {
    65                 if(flag&1<<i) {count++;getField(i+1);}
    66             }
    67             if(check()&&ans>count) ans=count;
    68             flag++;
    69         }
    70         if(ans<=10) cout<<ans<<endl;
    71         else cout<<-1<<endl;
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    线性代数基础知识的复习
    第一个机器学习算法:线性回归与梯度下降
    初识机器学习
    VScode中LeetCode插件无法登录的情况
    内存管理-内存管理功能
    分组密码
    Linux进程调度
    进程调度
    死锁
    临界区和缩
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/3859868.html
Copyright © 2011-2022 走看看