题目一(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. PHP遍历数组常用方式(for,foreach,while,指针等等)

    1使用for循环遍历数组 count($arr)用于统计数组元素个数         for循环只能用于遍历,纯索引数组!!如果存在关联数组,count统计两种数组的总个数         使用for ...

  2. js改变表单的内容样式

    一.改变单个样式    var obj = document.getElementById("id");   obj.style.cssText = " display: ...

  3. 【jquery】checkbox

    jquery操作checkbox 模拟选中: $('#aaa').prop('checked', true); 模拟取消选中: $('#aaa').prop('checked', false); 其它 ...

  4. f5源站获取http/https访问的真实源IP解决方案

    1.背景 F5负载均衡设备,很多场景下需要采用旁挂的方式部署.为了保证访问到源站的数据流的request和response的TCP路径一致,f5采用了snat机制.但是这样导致源站上看到的来源IP都是 ...

  5. apache jmeter 压力测试

    前面讲了linux下的压力测试,今天来个windows下的,用jmeter为例 我用了两个apache-jmeter-3.1和apache-jmeter-4.0分别进行了测试, 前者高并发电脑卡死时间 ...

  6. 绝对路径${pageContext.request.contextPath}

    ${pageContext.request.contextPath}用于解决使用相对路径时出现的问题,它的作用是取出所部署项目的名字. 如图,${pageContext.request.context ...

  7. AsnycTask内部实现原理

    AsnycTask 原理就是“线程池 + Handler”的组合. 使用线程池的主要原因是避免不必要的创建及销毁线程的开销. AsyncTask 里的线程池: private static final ...

  8. PL/SQL的快捷键设置

    PL/SQL用来连接Oracle数据库的一种工具,它可以设置快捷方式,以便于我们快速的操作. PL/SQL设置快捷键    tools->Preferences(首选项)->User In ...

  9. Magento2 php商城在windows10上安装

    magento2 下载地址:https://github.com/magento/magento2/archive/develop.zip 参考地址: 版本要求 这个magento2  要选择好php ...

  10. visual studio 2017 30天到期,不能输入注册码

    官网下载了visual studio 2017后,第一次安装没有登陆,导致只有30天试用期,虽然还在试用期内,但是无法使用注册码永久使用 解决办法: 1.注册一个微软账号,直接百度搜索“微软账号登陆” ...