题目一(poj-2965):传送门

思路:递归+枚举,遍历每一种情况,然后找出最小步骤的结果,与poj-1753类似。

#include<iostream>
#include<cstdio>
#include<cstring>
//#include<ctime>
using namespace std;
int x[],y[],xx[],yy[],ans=;
char str[];
int a[][];
void turn(int len)
{
int x=len/,y=len%;
for(int i=;i<;i++)
{
a[x][i]=!a[x][i];
a[i][y]=!a[i][y];
}
a[x][y]=!a[x][y];
}
bool pd()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(a[i][j]!=) return false;
return true;
}
void dfs(int len,int num) //要用len,否则时间超限。
{
if(pd())
{
if(ans>num)
{
ans=num;
for(int i=;i<=ans;i++)
{
xx[i]=x[i];
yy[i]=y[i];
}
}
return ;
}
if(len>=) return ; //基准情形
dfs(len+,num);//先搜索
turn(len); //再变化
x[num+]=len/+;
y[num+]=len%+;
dfs(len+,num+); //记得回溯。
turn(len);
}
int main(void)
{
int i,j;
//int st=clock(),ed;
for(i=;i<;i++)
{
scanf("%s",str);
for(j=;j<;j++)
if(str[j]=='-') a[i][j]=;
else a[i][j]=;
}
dfs(,);
printf("%d\n",ans);
for(i=;i<=ans;i++)
{
printf("%d %d\n",xx[i],yy[i]);
}
//ed=clock();
//printf("time==%d\n",ed-st);
return ;
} //原来用x,y作为参数,时间超限
/*#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
using namespace std;
int a[10][10],mi=99;
int x[100],y[100],cnt=0;
int xx[100],yy[100];
char str[10];
bool pd()
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(a[i][j]==1) return false;
return true;
}
void turn(int x,int y)
{
for(int i=0;i<4;i++)
{
a[x][i]=!a[x][i];
a[i][y]=!a[i][y];
}
a[x][y]=!a[x][y];
}
void dfs(int x1,int y1,int num)
{
if(pd())
{
if(mi>num)
{
mi=num;
for(int i=1;i<=num;i++)
{
xx[i]=x[i];
yy[i]=y[i];
}
}
return ;
}
if(x1*y1>9) return ; if(y1==3) dfs(x1+1,0,num);
else dfs(x1,y1+1,num);
turn(x1,y1);
x[num+1]=x1+1;y[num+1]=y1+1;
if(y1==3) dfs(x1+1,0,num+1);
else dfs(x1,y1+1,num+1);
turn(x1,y1);
}
int main(void)
{
int i,j;
int st,ed;
st=clock();
for(i=0;i<4;i++)
{
scanf("%s",str);
for(j=0;j<4;j++)
if(str[j]=='+') a[i][j]=1;
else a[i][j]=0;
}
dfs(0,0,0);
printf("%d\n",mi);
for(i=1;i<=mi;i++)
{
printf("%d %d\n",xx[i],yy[i]);
}
ed=clock();
printf("time==%d\n",ed-st);
return 0;
}*/

题目二(poj-2368):传送门

思路:巴什博奕,求出使后者成功的最小的L,就是求n的非一最小因子-1,要用素数筛法,否则超时。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
int a[maxn];
int main(void)
{
int n,i,m;
while(~scanf("%d",&n))
{
int len=;
for(i=;i*i<=n;i++)
{
if(n%i==)
{
a[len++]=i;
a[len++]=n/i;
}
}
sort(a,a+len);
int fg=;
for(i=;i<len;i++)
{
if(a[i]>=)
{
fg=;
printf("%d\n",a[i]-);
break;
}
}
if(fg==) printf("0\n");
}
return ;
}

总结:递归不要忘记确立分清楚基准情况,先搜索,再回溯。

假期训练八(poj-2965递归+枚举,hdu-2149,poj-2368巴什博奕)的更多相关文章

  1. (step8.2.4)hdu 1846(Brave Game——巴什博奕)

    题目大意:输入一个整数t,表示测试用例是.接着输入2个整数n,m.分别表示这堆石头中石头的个数,和每次所能取得最大的石头数.判断那一方为赢家 解题思路: 1)这是一道简单的巴什博弈: 所谓巴什博弈,是 ...

  2. POJ 2368 巴什博奕

    题目大意:给出n个按钮,每次最多可以按L个,按下最后一个按钮的人获胜.求使后手必定获胜的L的最小值(L>=2). 题目思路: 巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少 ...

  3. HDU 1846 Brave Game 巴什博奕

    解题报告:Alice和Bob在做一个取石子游戏,有一堆n个石子,然后规定每个人每次最少要去1个石子,最多可以取m个石子,最后一次取完石子的人为胜. 巴什博奕,关键是找到必胜点和必败点,我们可以先列举出 ...

  4. HDU 2149-Public Sale(巴什博奕)

    Public Sale Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  5. hdu 2149 (巴什博奕)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2149 Problem Description 虽然不想,但是现实总归是现实,Lele始终没有逃过退学的 ...

  6. 悼念512汶川大地震遇难同胞——选拔志愿者 HDU 2188 博弈论 巴什博奕

    悼念512汶川大地震遇难同胞--选拔志愿者 HDU 2188 博弈论 巴什博奕 题意 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队 ...

  7. HDU 5973 Aninteresting game 威佐夫博奕(Wythoff Game)

    HDU 5973:http://acm.hdu.edu.cn/showproblem.php?pid=5975 题意: 有两堆石子,每次可以从一堆石子中取任意个,或者从两堆石子中取相同个数的石子.两个 ...

  8. 假期训练七(hdu-2845 dp,hdu-1846,2188 巴什博奕)

    题目一:传送门 思路:动态规划,从每一行来看,每次更新求出这一点的最大值,dp[i]=MAX(dp[i-1],dp[i]+dp[i-2]),不会出现 两个数字相邻的情况:先对行进行更新,再对列进行更新 ...

  9. HDU 1856 Brave Game(巴什博奕)

    十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻. 今天,大家选择 ...

随机推荐

  1. python使用elasticsearch模块操作elasticsearch

    1.创建索引 命令如下 from elasticsearch import Elasticsearch es = Elasticsearch([{"host":"10.8 ...

  2. django的模板语言中一些之前没有用过的小点

    1.模板语言中的for循环的最后一个的表示方式 {% for auther in auther_list %} {% if forloop.last %} {# 这里的意思是for循环的最后一个的意思 ...

  3. eclipse启动出现Could not read metadata for ……

    Could not read metadata for …… E:\workspace\.metadata\.plugins\org.eclipse.core.resources\.projects\ ...

  4. 本地DNS解析

    企业搭配本地域名,进行解析 2018年07月23日 09:31:46 阅读数:2 搭建dns服务器,可以进行域名解析,这样方便企业项目本地测试. 可以实现,输入域名访问本地服务器 一.安装软件 1.下 ...

  5. linux命令学习之:ps

    Linux中的ps命令是Process Status的缩写.ps命令用于报告当前系统的进程状态,列出系统中当前运行的那些进程.可以搭配kill指令随时中断.删除不必要的程序. 要对进程进行监测和控制, ...

  6. httpclient的简单使用

    1.通过get请求后台,注意tomcat的编码设置成utf-8;    <Connector connectionTimeout="20000" port="808 ...

  7. 使用gearman进行异步的邮件或短信发送

    一.准备工作 1.为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式.2.使用gearmanManager来管理我们的worker脚本,方便测试. 上述两条请看我之前写的两篇文章 二 ...

  8. Vue 快速原型开发

    快速原型开发 注意: 是:serve 而不是 server 通过使用 vue serve 和 vue build 命令对单个 *.vue 文件进行快速原型开发,不过这需要先额外安装一个全局的扩展 go ...

  9. laravel中不使用 remember_token时退出报错,如何解决?

    Route::get('auth/logout','Auth\AuthController@getLogout'); 这是laravel自带的退出功能只需要写这一条路由就行了,但是很可能爆出以下错误: ...

  10. 26.mysql日志

    26.mysql日志mysql日志包括:错误日志.二进制日志.查询日志.慢查询日志. 26.1 错误日志错误日志记录了mysqld启动到停止之间发生的任何严重错误的相关信息.mysql故障时应首先查看 ...