hdu——4462(暴力枚举)
2013-08-23 19:38
295 查看
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4462
解析:不知道为什么正确的程序被判成W了,后来再提交W的程序就过了。(囧啊)。
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
#define INF 0xfffffff
#define MAX(a,b) a>b?a:b
#define MIN(a,b) a>b?b:a
#define N 50
#define M 100
struct Point{
int x,y,r;
}a
;
int n,k;
int visited[M][M];
int Abs(int t){
if(t<0) t=-t;
return t;
}
void Vis(int v){
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(visited[i][j]) continue;
if((Abs(i-a[v].x)+Abs(j-a[v].y))<=a[v].r) visited[i][j]=1;
}
}
void solve()
{
int ed=1<<k;
int min=INF;
for(int i=0;i<ed;i++){ //相当于dfs,枚举所有可能
memset(visited,0,sizeof(visited));
for(int j=0;j<k;j++)
visited[a[j].x][a[j].y]=1;
int mid=i,j=0,count=0;
while(mid>0){
if(mid&1)
{
Vis(count);
j++;
}
count++;
mid=mid/2;
}
if(j>=min) continue; //此时直接continue掉就可以
int flag=1;
for(int ii=1;ii<=n&&flag;ii++)
for(int jj=1;jj<=n;jj++)
if(!visited[ii][jj]){
flag=0;
break;
}
if(flag) min=j;
}
if(min==INF) cout<<"-1"<<endl;
else cout<<min<<endl;
}
int main()
{
int i,j;
while(cin>>n&&n){
cin>>k;
for(i=0;i<k;i++)
cin>>a[i].x>>a[i].y;
for(i=0;i<k;i++)
cin>>a[i].r;
solve();
}
return 0;
}
解析:不知道为什么正确的程序被判成W了,后来再提交W的程序就过了。(囧啊)。
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
#define INF 0xfffffff
#define MAX(a,b) a>b?a:b
#define MIN(a,b) a>b?b:a
#define N 50
#define M 100
struct Point{
int x,y,r;
}a
;
int n,k;
int visited[M][M];
int Abs(int t){
if(t<0) t=-t;
return t;
}
void Vis(int v){
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(visited[i][j]) continue;
if((Abs(i-a[v].x)+Abs(j-a[v].y))<=a[v].r) visited[i][j]=1;
}
}
void solve()
{
int ed=1<<k;
int min=INF;
for(int i=0;i<ed;i++){ //相当于dfs,枚举所有可能
memset(visited,0,sizeof(visited));
for(int j=0;j<k;j++)
visited[a[j].x][a[j].y]=1;
int mid=i,j=0,count=0;
while(mid>0){
if(mid&1)
{
Vis(count);
j++;
}
count++;
mid=mid/2;
}
if(j>=min) continue; //此时直接continue掉就可以
int flag=1;
for(int ii=1;ii<=n&&flag;ii++)
for(int jj=1;jj<=n;jj++)
if(!visited[ii][jj]){
flag=0;
break;
}
if(flag) min=j;
}
if(min==INF) cout<<"-1"<<endl;
else cout<<min<<endl;
}
int main()
{
int i,j;
while(cin>>n&&n){
cin>>k;
for(i=0;i<k;i++)
cin>>a[i].x>>a[i].y;
for(i=0;i<k;i++)
cin>>a[i].r;
solve();
}
return 0;
}
相关文章推荐
- HDU 4462(暴力枚举)
- HDU 5778 abs(暴力枚举)——BestCoder Round #85 1003
- HDU 1238 Substrings(KMP+暴力枚举)
- Hdu 4462 Scaring the Birds(枚举子集)
- hdu 5726 区间gcd RMQ+二分 || 暴力枚举
- HDU 5024 Wang Xifeng's Little Plot(暴力枚举+瞎搞)
- HDU 5660 jrMz and angles (暴力枚举)
- hdu 5228 暴力枚举ZCC loves straight flush
- HDU 4143 A Simple Problem (枚举暴力)
- hdu 4587 TWO NODES 暴力枚举+tarjan
- hdu 4445 Crazy Tank (暴力枚举)
- HDU 5310 Hidden String(暴力枚举)
- HDU 4961 Boring Sum(哈希标记,暴力枚举)
- hdu 1172 猜数字(暴力枚举)
- hdu 1238 Substrings(暴力枚举)
- hdu 5128 The E-pang Palace(计算几何,暴力枚举)
- HDU 4618Palindrome Sub-Array(暴力枚举每一个正方形)
- 【HDU - 2092 】 整数解 【暴力枚举】
- hdu 4770 Lights Against Dudely(暴力枚举dfs)
- HDU 5175 Misaki's Kiss again(数学,暴力枚举)