您的位置:首页 > 其它

hdu 2804 先打表找规律

2017-10-09 23:27 218 查看
写这道题时,由于n的规模很大,暴力搜索肯定不行,所以先写个dfs找出10组数据,找出规律

写dfs跟N皇后问题相似,我的程序较慢(打出几组数据还是没问题的)

dfs(打表)

#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#define INF 99999999
#define LL long long
#define maxn 100
using namespace std;
int book[20][20];
int n,sum,res;
void jdgbook(int x,int y)
{
int xx,yy;
xx = x; yy = y;
while(xx>0) book[xx--][y]++;
xx = x; yy = y;
while(yy>0) book[x][yy--]++;
xx = x; yy = y;
while(xx<=n) book[xx++][y]++;
xx = x; yy = y;
while(yy<=n) book[x][yy++]++;
xx = x; yy = y;
while(xx<=n && yy<=n) book[xx++][yy++]++;
xx = x; yy = y;
//while(xx>0 && yy<=n) ch[xx--][yy++]++;
//xx = x; yy = y;
//while(xx<=n && yy>0) ch[xx++][yy--]++;
//xx = x; yy = y;
while(xx>0 && yy>0) book[xx--][yy--]++;

}
void frebook(int x,int y)
{
int xx,yy;
xx = x; yy = y;
while(xx>0) book[xx--][y]--;
xx = x; yy = y;
while(yy>0) book[x][yy--]--;
xx = x; yy = y;
while(xx<=n) book[xx++][y]--;
xx = x; yy = y;
while(yy<=n) book[x][yy++]--;
xx = x; yy = y;
while(xx<=n && yy<=n) book[xx++][yy++]--;
xx = x; yy = y;
//while(xx>0 && yy<=n) ch[xx--][yy++]--;
//xx = x; yy = y;
//while(xx<=n && yy>0) ch[xx++][yy--]--;
//xx = x; yy = y;
while(xx>0 && yy>0) book[xx--][yy--]--;
}
bool rejdgbook()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(book[i][j]<=0)
return false;
}
}
return true;
}
void dfs(int step)
{
if(rejdgbook()==true)
{
if(sum>res)
res=sum;
return ;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(book[i][j]<=0)
{
jdgbook(i,j);
sum++;
dfs(step+1);
frebook(i,j);
sum--;
}
}
}
}
int main()
{
while(cin>>n)
{
int ans=-1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
memset(book,0,sizeof(book));
res=-1;
jdgbook(i,j);
sum=1;
dfs(1);
ans=max(ans,res);
}
}
cout << ans << endl;
}
return 0;
}
ac代码
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>

using namespace std;

int main()
{
long long n;
while(cin>>n&&n)
{
if(n%3==0)
cout << n/3*2 << endl;
else
cout << (n+2)/3*2-1 << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: