一,做题状况:

这几天一直处于低谷状态,是因为50题的小坎来了么?呵呵

做题目都没什么思路,看完别人的解题报告后,豁然开朗,哦,明白了,想起来了。。。

归根结底,自己学的不牢固啊,例如这几天的DFS,很多时候看完题才知道,原来这道题目可以用DFS啊。刚开始看题的时候,根本想不到用DFS,就算想到了DFS,也不知道怎么用,总觉得有点模糊不清,还是基础不牢靠吧。

这道题,知道用DFS后,想到用DFS枚举全排列,本来准备马上开始写了,但是决定还是先看看别人的代码。果然啊,如果按照我之前的写法,肯定150行左右的代码量了,而且写完后估计还要调试,各种错误之类问题。 而看完前辈的代码后,终于感觉到了什么叫做精炼的代码。最后50行就可以AC了。

二、思路分析:DFS

三、题目类型:DFS,连回溯都没有。网上有人说可以剪枝,但是我始终没想到怎么个剪枝法,因为没法提前找到不符合的路线。

四、进步:

1.明白了,很多时候题目要靠我们用毅力去想,去思考。否则,做题的印象肯定不深刻,效果也不佳。

2.代码要向别人学习,学习写精炼的代码,一方面速度快,另外一方面,健壮性强。 前段时间老是抱怨自己,虽然能AC,但是发现自己的代码长度老师比前面AC的人长很多,甚至有别人两倍那么长,觉得自己写的代码肯定没什么风格,太不精练了。又不知如何成长,其实多多看牛人的源码是由很大好处的。

3.思维要开阔,做题的时候不要急于CODING,很多时候,花几分钟的时间想想数据结构怎么组织,往往会给后期CODING带来巨大的好处,磨刀不误砍柴工,前期思路,数据结构想得好,最后CODING起来也省事,也不需要不断的DEBUG,遇到昨天那道题。 昨天那道题POJ2351,真是让我受益匪浅,很多时候,你采取的数据的表示方式采取得好的话,做起来,何止是事半功倍啊? 远远超出自己的想想。 beyond your expectation!

五源码:

方法一 248K 1360MS VS 方法二 248K  407MS

方法一优点:思路简洁明了,缺点:在DFS终点上用到了复杂度O(n^2)

方法二优点:复杂度只是O(n)(不考虑递归的复杂度),只是算法理解起来比方法一稍微绕一点点,其实只要认真看一遍,就明白了。

//方法一 248K 1360MS
//AC
#include <iostream>
using namespace std;

const int MAX_N = 21;
int N;
int graph[MAX_N][MAX_N];
bool InFirstClass[MAX_N];
int answer;

void dfs(int depth)
{
if( depth == N )
{
int sum = 0;
for(int i=0; i<N; ++i)
{
for(int j=i+1; j<N; ++j)
if( InFirstClass[i] != InFirstClass[j] )
sum += graph[i][j];
}
if( sum > answer )
answer = sum;
return;
}
InFirstClass[depth] = true;
dfs(depth+1);
InFirstClass[depth] = false;
dfs(depth+1);
}

int main()
{
//freopen("data.txt","r",stdin);
cin>>N;
for(int i=0; i<N; ++i)
{
for(int j=0; j < N; ++j)
cin>>graph[i][j];
//InFirstClass[i] = false;  //其实这个没必要初始化
}
answer = 0;
InFirstClass[0] = true;
dfs(1);
cout<<answer<<endl;
return 0;
}

//方法二 248K 407MS
//AC
#include <iostream>
using namespace std;

const int MAX_N = 21;
int N;
int graph[MAX_N][MAX_N];
bool InFirstClass[MAX_N];
int answer;

void dfs(int depth,int sum)
{
if( depth == N )
{
if( sum > answer )
answer = sum;
return;
}
//初步考虑这是第1集合的,那么把前面第2集合到这个点的距离都加起来
int temp = 0;
for(int i=0; i<depth; ++ i)
if( !InFirstClass[i] ) 
temp += graph[i][depth];
InFirstClass[depth] = true;
dfs(depth+1,sum+temp);
//现在考虑这是第1集合的,那么把前面第2集合到这个点的距离都加起来
temp = 0;
for(int i=0; i<depth; ++ i)
if( InFirstClass[i] ) 
temp += graph[i][depth];
InFirstClass[depth] = false;
dfs(depth+1,sum+temp);
}

int main()
{
//freopen("data.txt","r",stdin);
cin>>N;
for(int i=0; i<N; ++i)
{
for(int j=0; j < N; ++j)
cin>>graph[i][j];
//InFirstClass[i] = false;
}
answer = 0;
InFirstClass[0] = true;
dfs(0,0);
cout<<answer<<endl;
return 0;
}

好了,谨以此文,纪念自己跨过POJ50道题的小里程碑。(虽然第50道题不是完全我的创意,是我从他人那里学习到的。其实前面的题,也有很多。)

2011.11.23 POJ2531解题报告【谨以此文,纪念自己跨过POJ50道题的小里程碑】相关推荐

  1. 谨以此文纪念2019年3月春招

    谨以此文纪念2019年3月春招 简历情况 本科大三,5%. 计算机视觉深度学习项目2个(一大一小),大项目论文投了<计算机应用>. 浙江省"新苗"科技创新项目立项,绍兴 ...

  2. 谨以此文纪念2019年春招

    谨以此文纪念2019年春招 前言 整个三四月,一直在背知识点,感觉好多内容没有复习到位. 每天刷着leetcode和ZOJ,逛着牛客网看又有哪家开始面试,每天的心情就像一个"W". ...

  3. 谨以此文纪念逝去的SUN

    谨以此文纪念逝去的SUN        此图转载自Java之父james gosling的blog  http://blogs.sun.com/jag/entry/so_long_old_friend ...

  4. [国家集训队2011]拆迁队nbsp;解题报告

    题目: http://cogs.pro/cogs/problem/problem.php?pid=1859 lanxisi带领着他的拆迁队来整治一个街道.这个街道由N个旧房子组成,从左到右编号为1.. ...

  5. 三年,也只是一瞬间,谨以此文纪念我在大学的岁月

    感想:写在前面 从我第一次接触CSDN到现在已经有快接近三年了,依稀记得当初帅气的室友推荐我写写博客记录学习生涯,后来便喜欢上了写作,也不是为了给谁看,也不是为了收获多少粉丝,更不是为了盈利(说实话, ...

  6. 11行代码AC——比紫书优化,例题2-3 近似计算——解题报告

    励志用更少的代码做高效的表达 题意: 计算π/4 = 1 - 1/3 + 1/5 - 1/7 + -,直到最后一项小于10^-6. 思路分析: 本题很简单,因此计算重心从解题转化为优化. 本题为重复计 ...

  7. Ubuntu命令集(2011.11.23始-用到记录)

    1.安装查看chm格式文件的命令:sudo apt-get install chmsee 2.下载并安装tomcat: (1).到http://tomcat.apache.org/下载tomcat ( ...

  8. 谨以此文纪念我的2020——不负热爱,砥砺前行

    全文26339个字,可能有点长,O(∩_∩)O哈哈~ 不知不觉2020年已近尾声,2020年对于我来说是非常难忘的,它也终将被记入历史. 我是某某学校大二学生,高中时期就开始接触编程,已有二年(博龄三 ...

  9. 谨以此文纪念我的大学四年

      今天是2020年6月29日.算起来,我已经在家呆了整整半年了.如果没有疫情的影响,或许我已经顺利拿到双证,开始工作了.此时已是深夜,看着窗外车辆快速驶过的身影,纷飞的思绪,不禁回到四年前. 从高考 ...

  10. 谨以此文纪念我伟大的父亲

    2016年12月12日中午,我接到了老叔的一个电话:"啊龙,赶紧回来,你爸爸不行了!".我放下刚打好的饭,立马回公司请假,老板娘给我买了机票,并迅速把我送到了机场.不幸的是沈阳当天 ...

最新文章

  1. 解决 Could not autowire. No beans of ‘UserDao‘ type found 问题
  2. 你真的了解软件测试行业吗?
  3. Vue_(组件通讯)非父子关系组件通信
  4. python快速编程入门教程-半小时带你快速入门Python编程,Python快速入门教程
  5. 【贪心】【字典树】Gym - 101466A - Gaby And Addition
  6. tos重装mysql_云服务器(腾讯云)从零开始部署记录(3)之mysql5.7安装
  7. 路由器连接久点就慢下来了,怎么回事?
  8. 如果股市出现震荡行情,投资者应如何应对?
  9. #CSP 201512-1 数位之和(100分)
  10. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
  11. GoldenGate 1403错误解决方法
  12. R语言从初级到精通-张长志-专题视频课程
  13. pageoffice 选中部分文字 添加书签和空白处添加书签 删除空白以及内容书签
  14. Ubuntu下改变键盘映射
  15. UART通信协议(一)比特率和波特率
  16. 数学分析 实数与函数(第1,7章)
  17. java end_Fabric学习笔记(七) - fabric-sdk-java End2endIT运行
  18. 无法直接在IE中打开PDF文件的解决方法
  19. Qt模仿网易云黑胶片转动动画
  20. Qt项目移植出现的问题(No rule to make target ‘……’, needed by ‘……’. Stop.)

热门文章

  1. React 17 要来了,非常特别的一版
  2. 手把手教你Android Studio环境搭建
  3. SQL Server 备份 出现操作系统错误 5(拒绝访问。)
  4. 十三、城市建成区时空扩张分析——标准差椭圆
  5. 电脑出现网络连接失败
  6. 设置一个动态的壁纸作为你的linux桌面
  7. 打造无界生态 新华三全方位布局渠道市场
  8. 007推荐好书之传记类:《解读傅雷一家》与《解密钱学森》
  9. vuepress入门详解(六)vuepress 实用插件
  10. 【英语:语法基础】C7.日常对话-校园生活