2017/8/24

来源:互联网 发布:网络教育学校有区别吗 编辑:程序博客网 时间:2024/05/21 09:48

Bad Hair Day

题意:给出从左到右的牛的高度,每头牛可以在不被挡住视线的情况下看到右边的牛,求所有牛能够看到的右边的牛的数量和。

解题思路:构建一个递减的单调栈,每次插入一头牛的数据时,将前面小于它的高度的数据删除,每清除之前小的数据之后插入新的数据之前用sum求一次累加和,其表达的含义是在准备插入的牛之前有多少比自己高的牛,这些牛能够看到要插入的牛所以将其数量加上。当再出现一头更高的牛时,前面的牛都不能看到此牛的头顶时再将之前的牛在栈中都清除掉,同时也表达了前面的牛的视线受阻,同样无法看到后面的牛的头顶。

 

 

Cow Roller Coaster

题意:要用N种材料建一条长为L的路,现在给出每种材料的长度w,起始地点x,发费c和耐久度f ,求在预算为B的情况下,建好这条路的最大耐久度是多少

解题思路:首先能够想到题目是一道背包问题,而且是01背包。期间没有做出这道题目的原因是在于考虑成本、每块材料的长度和从起点到终点的题目设置理解的太复杂就先放弃这道题。后来再看这道题发现X所提示的含义其实是在说每块材料都确定放在区间之中不会超出区间,所以就可以不考虑这一信息,将起始点和花费作为参数构建dp数组。

状态转移方程:dp[起点][花费]=max{前一个起点加上这一块材料,前一个起点不加这一块材料};

dp[i+w][j+c]=max{dp[i+w][j+c],dp[i][k]+f};

 

 

 

Treats for theCows

题意:给定一个数列a1、a2、a3、….   、an,每次取数列最前面的一个数或者数列最后面的一个数,并将其值乘以取的次数,求所有数取完后的乘积和最大为多少?

解题思路:最先开始想到用贪心方法解题,贪心策略为始终取首尾两个数中最小的那个数。但是用贪心算法写出的代码提交会显示WA,这就说明了算法的设计出现了问题。再想在{8,9,7,8.5}这个区间上首先用8.5比首先用8的计算和要大,所以用贪心算法解决这个问题存在一定的缺陷,因为这一个决定的数会影响下一个数的选择数,所以换成了动态搜索这个全面搜索数据的算法。

 

 

Stall Reservations

解题思路:这道题目在看到时多少犯了经验主义的错误,只记得用贪心算法可以解决,就不断地通过比较进行排序加入一个新的房间,由于没有对结束时间进行排序操作所以进行了很多无谓的比较,导致提交出现TLE。所以此题的解释应该是先将每头牛按照产奶结束的时间进行排序,如果结束时间一致的话就按照产奶开始时间早的在前。试想如果是按照产奶的开始时间进行排序是否可以?这一点我认为是不可以的,一方面开始时间不能决定结束时间是多少,所以不能最快搜索到可以插入的房间,浪费时间。另一方面存在浪费空间的现象。所以不能将开始时间排序。

 

 

The Grove

解题思路:搜索的题目在我看来还是更有把握的类型,这道题看到第一眼的感觉是最短路径所以BFS,但是如何处理判断是否绕过树林走了一圈这个问题让我思考了一会在网上找到的题解说是寻找射线来解决,正在理解,之后在上交题目的理解

 

 

POJ3252    RoundNumber

看过题解发现暂时还没有这种能力解决这道题目,也就暂时不做总结。

http://blog.csdn.net/lyy289065406/article/details/6648458

 

 

本次训练赛的感受:能够把6道题的意思都把握,3个小时的做题时间也没有和分心,算是做的比较认真的一次训练赛,唯一不足的是2道题能够做出来却因为慌张和细节理解错误而没有做出来,而是去看其他的题目导致越来越没有信心去思考,在以后的训练中还是应该把每一道题认真理解清楚和想清楚以后再开始写代码。

原创粉丝点击