算法训练 Lift and Throw  
时间限制:3.0s   内存限制:256.0MB
    
问题描述
  给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之差的绝对值.
  Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点.
  每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次.
  1.移动一定的距离
  2.把另一个角色高举过头
  3.将举在头上的角色扔出一段距离
  每个角色有一个movement range参数, 他们只能移动到没有人的位置, 并且起点和终点的距离不超过movement range.
  如果角色A和另一个角色B距离为1, 并且角色B没有被别的角色举起, 那么A就能举起B. 同时, B会移动到A的位置,B原来所占的位置变为没有人的位置. 被举起的角色不能进行任何操作, 举起别人的角色不能移动.同时, 每个角色还有一个throwing range参数, 即他能把举起的角色扔出的最远的距离. 注意, 一个角色只能被扔到没有别的角色占据的位置. 我们认为一个角色举起另一个同样举起一个角色的角色是允许的. 这种情况下会出现3个人在同一个位置的情况. 根据前面的描述, 这种情况下上面的两个角色不能进行任何操作, 而最下面的角色可以同时扔出上面的两个角色. 你的任务是计算这些角色能够到达的位置的最大下标, 即最大的数字x, 使得存在一个角色能够到达x.
输入格式
  输入共三行, 分别为Laharl, Etna, Floone的信息.
  每一行有且仅有3个整数, 描述对应角色的初始位置, movement range, throwing range.
  数据保证3个角色的初始位置两两不相同且所有的数字都在1到10之间.</div>
输出格式
  仅有1个整数, 即Laharl, Etna, Flonne之一能到达的最大距离.
样例输入
9 3 3
4 3 1
2 3 3
样例输出
15
样例说明
  一开始Laharl在位置9, Etna在位置4, Flonne在位置2.
  首先, Laharl移动到6.
  然后Flonne移动到位置5并且举起Etna.
  Laharl举起Flonne将其扔到位置9.
  Flonne把Etna扔到位置12.
  Etna移动到位置15.
 
我想的思路是一人有三种操作,分别是移动,举起旁边的,扔自己上面的。三个人就是九种。
然后九种操作进行深度搜索。
样例给过了,但提交只有两组数据对了。
做了两晚上都没调好,我感觉我的思路应该没有错误。
 如果你有思路,希望告知我。
递归的程序虽然比较好想,但是稍微一复杂根本就没法调bug啊,很容易迷失在不知第几层。。。
 #include <iostream>
#include <cstdio> using namespace std; typedef struct node{
int loca;
int moverange;
int throwrange;
};
struct node a[];
int w[]={};
int is_move[]={};
int is_lift[]={};
int is_throw[]={};
int is_belifted[]={};
int ans=;
int step[]={}; int dfs();
//第一个人的第一种操作,移动
void fun11(){
if(!is_move[]){
int t=a[].loca+a[].moverange;
for(int i=a[].loca-a[].moverange; i<=t; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=a[].loca;
int t3=is_move[];
w[a[].loca]=;
w[i]=;
a[].loca=i;
is_move[]=;
dfs();
w[a[].loca]=t1;
w[i]=;
a[].loca=t2;
is_move[]=t3;
} }
}
}
//第一个人的第二种操作,举起两边的
void fun12(){
for(int i=;i<=;i++){
if(w[a[].loca-]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[]; w[a[].loca-]=;
is_belifted[i]=;
is_lift[]=i;
dfs(); w[a[].loca-]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
if(w[a[].loca+]==i){
int t1=w[a[].loca+];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca+]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca+]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
}
}
//第一个人的第三种操作,扔自己上面的
void fun13(){
if(!is_throw[] && is_lift[]!=){
for(int i=a[].loca-a[].throwrange; i<=a[].loca+a[].throwrange; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=w[i];
int t3=a[].loca;
int t4=is_throw[];
w[a[].loca]=;
w[i]=is_lift[];
a[].loca=i;
is_throw[]=;
dfs();
w[a[].loca]=t1;
w[i]=t2;
a[].loca=t3;
is_throw[]=t4;
} }
}
} //第二个人的第一种操作,移动
void fun21(){
if(!is_move[]){
int t=a[].loca+a[].moverange;
for(int i=a[].loca-a[].moverange; i<=t; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=a[].loca;
int t3=is_move[];
w[a[].loca]=;
w[i]=;
a[].loca=i;
is_move[]=;
dfs();
w[a[].loca]=t1;
w[i]=;
a[].loca=t2;
is_move[]=t3;
} }
}
}
//第二个人的第二种操作,举起两边的
void fun22(){
for(int i=;i<=;i++){
if(w[a[].loca-]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca-]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca-]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
if(w[a[].loca+]==i){
int t1=w[a[].loca+];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca+]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca+]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
}
}
//第二个人的第三种操作,扔自己上面的
void fun23(){
if(!is_throw[] && is_lift[]!=){
for(int i=a[].loca-a[].throwrange; i<=a[].loca+a[].throwrange; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=w[i];
int t3=a[].loca;
int t4=is_throw[];
w[a[].loca]=;
w[i]=is_lift[];
a[].loca=i;
is_throw[]=;
dfs();
w[a[].loca]=t1;
w[i]=t2;
a[].loca=t3;
is_throw[]=t4;
} }
}
}
//第三个人的第一种操作,移动
void fun31(){
if(!is_move[]){
int t=a[].loca+a[].moverange;
for(int i=a[].loca-a[].moverange; i<=t; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=a[].loca;
int t3=is_move[];
w[a[].loca]=;
w[i]=;
a[].loca=i;
is_move[]=;
dfs();
w[a[].loca]=t1;
w[i]=;
a[].loca=t2;
is_move[]=t3;
} }
}
}
//第三个人的第二种操作,举起两边的
void fun32(){
for(int i=;i<=;i++){
if(w[a[].loca-]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca-]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca-]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
if(w[a[].loca+]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca+]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca+]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
}
}
//第三个人的第三种操作,扔自己上面的
void fun33(){
if(!is_throw[] && is_lift[]!=){
for(int i=a[].loca-a[].throwrange; i<=a[].loca+a[].throwrange; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=w[i];
int t3=a[].loca;
int t4=is_throw[];
w[a[].loca]=;
w[i]=is_lift[];
a[].loca=i;
is_throw[]=;
dfs();
w[a[].loca]=t1;
w[i]=t2;
a[].loca=t3;
is_throw[]=t4;
} }
}
} int dfs(){
ans=max(ans,a[].loca);
ans=max(ans,a[].loca);
ans=max(ans,a[].loca);
//if(is_move[1]==1&&is_move[2]==1&&is_move[3]==1&&is_throw[1]==1&&is_throw[2]==1&&is_throw[3]==0||is_throw[1]==1&&is_throw[2]==0&&is_throw[3]==1||is_throw[1]==0&&is_throw[2]==1&&is_throw[3]==1){
// return 0;
//}else{
for(int i=;i<=;i++){
if(!step[i]){
switch(i){
case :step[]=;fun11();step[]=;break;
case :step[]=;fun12();step[]=;break;
case :step[]=;fun13();step[]=;break;
case :step[]=;fun21();step[]=;break;
case :step[]=;fun22();step[]=;break;
case :step[]=;fun23();step[]=;break;
case :step[]=;fun31();step[]=;break;
case :step[]=;fun32();step[]=;break;
case :step[]=;fun33();step[]=;break;
}
} }
return ;
//} } int main()
{
for(int i=;i<=;i++){
scanf("%d %d %d",&a[i].loca,&a[i].moverange,&a[i].throwrange);
}
dfs();
printf("%d\n",ans);
return ;
}

总是有一个程序的bug没找到的更多相关文章

  1. 我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!

    你好呀,我是歪歪. 前几天有朋友给我发来这样的一个截图: 他说他不理解,为什么这样不报错. 我说我也不理解,把一个 boolean 类型赋值给 int 类型,怎么会不报错呢,并接着追问他:这个代码截图 ...

  2. 创建 userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错: 未能加载文件或程序集“System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统没找到指定的文件

    创建 userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错: 未能加载文 ...

  3. 微信小程序没找到构建npm或者没找到node_modules目录以及如何在小程序中引入vant weapp组件

    微信小程序没找到构建npm或者没找到node_modules目录解决方法如下: 按照微信小程序提供的文档npm install是不行的,直接提示没找到可构建的npm包. 1.直接安装:npm init ...

  4. 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;

    考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...

  5. --专访雷果国: 从1.5K到18K 一个程序员的5年成长之路--

    导语:今年三月份,在CSDN博客和新浪微博上有一篇<从1.5K到18K,一个程序员的5年成长之路>被众人分享和传阅,这篇博文首先介绍了作者自学之初薄弱的基础,然后通过流水账形式分享了那个从 ...

  6. 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路

    我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...

  7. 写一个程序,统计自己C语言共写了多少行代码。ver2.00

    概要 完成一个程序,作用是统计一个文件夹下面所有文件的代码行数.输入是一个文件夹的绝对路径,输出是代码行数.所以此程序的新特点有两个: 统计某一文件夹下的所有文件: 可以任意指定本机硬盘上任何位置的某 ...

  8. 说实话当一个程序猿不easy

    我以前说过,程序猿不是一般的人,是具有某种超能里的人.但问题是.程序猿往往意识不到自己的这样的特异功能.在他们的眼里.会觉得自己非常普通.跟常人一样,所以,程序猿能做到的事情,其它人--比方他们的客户 ...

  9. OD 实验(十七) - 对一个程序的逆向分析

    程序: 运行程序 弹出一个对话框,点击 OK 来到主界面,点击 Help -> Register Now 这是输入注册码的地方 按关闭程序的按钮 会提示剩下 30 天的使用时间 用 Ressco ...

随机推荐

  1. python 环境搭建

    python下载地址: 进入https://www.python.org/download/releases/3.3.4/,下载Windows X86-64 MSI Installer (3.3.4) ...

  2. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...

  3. RCW 生存期控制

    RCW是.net 对com的包装,比如office就是通过RCW来被.net调用的.可以百度:office pia 了解更多信息. RCW 是一个.net类. 1.关闭线程对rcw的自动清理 Syst ...

  4. 这些年学过的FPGA

    这些年学过的FPGA 最近看了老罗的鄙视链是怎样炼成的,联想到FPGA.从2011年底开始接触FPGA到现在已经快接近4个年头了,这四年见证了Altera-FPGA的发展,使用的cyclone系列的芯 ...

  5. Eclipse+Maven创建webapp项目<一>(转)

    还在为jar下载而烦恼吗?还在为jar依赖关系而烦恼吗?还在为jar冲突而烦恼吗?强大的maven项目管理工具来拯救你们呢?自动下载jar,自动下载jar依赖包.你什么都不用做,只需要在中央仓库中co ...

  6. [转]在html中控制自动换行

    其实只要在表格控制中添加一句 <td style="word-break:break-all">就搞定了. 其中可能对英文换行可能会分开一个单词问题:解决如下: 语法: ...

  7. UIlabel的字体自适应属性

    有时候我们需要UIlabel根据字数多少来减小字体大小,使得UIlabel能够显示全所有的文字.你需要做的就是设置minimumScaleFactor.minimumScaleFactor默认值是0, ...

  8. 不从SD卡启动树莓派2

    本文你可以学到: berryboot使用,kali安装,开挂的MobaXterm,以及关于通过LABEL和UUID挂载的小技巧. 本文默认你有一定Linux基础,同时针对刚入门的水平,因为这是我的折腾 ...

  9. UICollectionView

    #import "ViewController.h" @interfaceViewController ()<UICollectionViewDataSource,UICol ...

  10. ES5语法

    ES5新语法主要是体现在Object和.Array操作,同时涉及到JSON. Function.Date 和 String类型上. 1.Object ES5最大的特点是对象扩展很多方法. 新建对象:c ...