您的位置:首页 > 其它

ACM集训日记-8月4日

2017-08-04 19:14 190 查看
    感觉今天题目出的还是慢啊= =,还是只出了两道题,感觉速度有些提不上来啊···

    今天做的第一道题点击打开链接,题目意思一开始捉摸不透,以为只要求两个节点之间的距离加起来最大的那个值就行了,结果too
young too simple~烦了我好久,我只好先找别人写的题目大意看了看,果然理解错了,它这道题的意思是把所有点分成两堆,求这两堆点之间的数据流量之和的最大值,另外,相同堆里的数据流量不用算。这次是深搜,因为是题目中并没有要求最短路径类似的东西,所以用深搜把可能的情况罗列一遍

void dfs(int num,int data)
{
vis[num]=1;//把num这个节点放进B堆里
int temp=data;
for(int i=1;i<=n;i++)
{
if(vis[i]==1)temp-=c[num][i];//如果i这个点已经在B堆里,减去num到i的数据流量
else temp+=c[num][i];//如果i这个点不在B堆里,加上num到i的数据流量
}
MAX=max(temp,MAX);//求和的最大值
for(int i=num+1;i<=n;i++)
{
if(temp>data)
{
dfs(i,temp);
vis[i]=0;
}
}
}    今天的第二题点击打开链接,做的是数独,完成这题以后数独放进程序里跑一跑就出结果了(笑),一开始我用的是二维数组用深搜遍历到最后就行了,但是发现很费时,也费空间,后来参考了前辈的题解,顿觉明悟,发现数独的每一个空格其实是可以用一个数来表示的,而且,也可以由这个数来表示该数所在的小方格的左上的数,在判断是否符合条件的时候很方便,以后在遇到这种表格啊,地图啊之类的,也许可以用一个数来表示二维的坐标。
    今天可能最大的收获就是这第二题的一种技巧了。

    希望明天会更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: