2011.11.23 POJ2531解题报告【谨以此文,纪念自己跨过POJ50道题的小里程碑】
一,做题状况:
这几天一直处于低谷状态,是因为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道题的小里程碑】相关推荐
- 谨以此文纪念2019年3月春招
谨以此文纪念2019年3月春招 简历情况 本科大三,5%. 计算机视觉深度学习项目2个(一大一小),大项目论文投了<计算机应用>. 浙江省"新苗"科技创新项目立项,绍兴 ...
- 谨以此文纪念2019年春招
谨以此文纪念2019年春招 前言 整个三四月,一直在背知识点,感觉好多内容没有复习到位. 每天刷着leetcode和ZOJ,逛着牛客网看又有哪家开始面试,每天的心情就像一个"W". ...
- 谨以此文纪念逝去的SUN
谨以此文纪念逝去的SUN 此图转载自Java之父james gosling的blog http://blogs.sun.com/jag/entry/so_long_old_friend ...
- [国家集训队2011]拆迁队nbsp;解题报告
题目: http://cogs.pro/cogs/problem/problem.php?pid=1859 lanxisi带领着他的拆迁队来整治一个街道.这个街道由N个旧房子组成,从左到右编号为1.. ...
- 三年,也只是一瞬间,谨以此文纪念我在大学的岁月
感想:写在前面 从我第一次接触CSDN到现在已经有快接近三年了,依稀记得当初帅气的室友推荐我写写博客记录学习生涯,后来便喜欢上了写作,也不是为了给谁看,也不是为了收获多少粉丝,更不是为了盈利(说实话, ...
- 11行代码AC——比紫书优化,例题2-3 近似计算——解题报告
励志用更少的代码做高效的表达 题意: 计算π/4 = 1 - 1/3 + 1/5 - 1/7 + -,直到最后一项小于10^-6. 思路分析: 本题很简单,因此计算重心从解题转化为优化. 本题为重复计 ...
- Ubuntu命令集(2011.11.23始-用到记录)
1.安装查看chm格式文件的命令:sudo apt-get install chmsee 2.下载并安装tomcat: (1).到http://tomcat.apache.org/下载tomcat ( ...
- 谨以此文纪念我的2020——不负热爱,砥砺前行
全文26339个字,可能有点长,O(∩_∩)O哈哈~ 不知不觉2020年已近尾声,2020年对于我来说是非常难忘的,它也终将被记入历史. 我是某某学校大二学生,高中时期就开始接触编程,已有二年(博龄三 ...
- 谨以此文纪念我的大学四年
今天是2020年6月29日.算起来,我已经在家呆了整整半年了.如果没有疫情的影响,或许我已经顺利拿到双证,开始工作了.此时已是深夜,看着窗外车辆快速驶过的身影,纷飞的思绪,不禁回到四年前. 从高考 ...
- 谨以此文纪念我伟大的父亲
2016年12月12日中午,我接到了老叔的一个电话:"啊龙,赶紧回来,你爸爸不行了!".我放下刚打好的饭,立马回公司请假,老板娘给我买了机票,并迅速把我送到了机场.不幸的是沈阳当天 ...
最新文章
- 解决 Could not autowire. No beans of ‘UserDao‘ type found 问题
- 你真的了解软件测试行业吗?
- Vue_(组件通讯)非父子关系组件通信
- python快速编程入门教程-半小时带你快速入门Python编程,Python快速入门教程
- 【贪心】【字典树】Gym - 101466A - Gaby And Addition
- tos重装mysql_云服务器(腾讯云)从零开始部署记录(3)之mysql5.7安装
- 路由器连接久点就慢下来了,怎么回事?
- 如果股市出现震荡行情,投资者应如何应对?
- #CSP 201512-1 数位之和(100分)
- 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
- GoldenGate 1403错误解决方法
- R语言从初级到精通-张长志-专题视频课程
- pageoffice 选中部分文字 添加书签和空白处添加书签 删除空白以及内容书签
- Ubuntu下改变键盘映射
- UART通信协议(一)比特率和波特率
- 数学分析 实数与函数(第1,7章)
- java end_Fabric学习笔记(七) - fabric-sdk-java End2endIT运行
- 无法直接在IE中打开PDF文件的解决方法
- Qt模仿网易云黑胶片转动动画
- Qt项目移植出现的问题(No rule to make target ‘……’, needed by ‘……’. Stop.)