SRM 582 Div II Level Three: ColorTheCells, Brute Force 算法
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12581
Burte Force 算法,求解了所有了情况,注意 next_permutation 函数的用法。
#include <iostream>
#include <vector>
#include <limits>
#include <algorithm> using namespace std; class ColorTheCells
{
private:
vector <int> dryingTime; /* 需要干燥的时间 */
vector <long> dryedTime; /* 正好干燥的时间,0表示还没有paint */
vector <int> paint_order; /* paint格子的顺序 */
public:
long calc(int seq);
int minimalTime(vector <int> dryingTime);
}; #define MOVE_TIME 1L
#define PAINT_TIME 1L
#define INFINITY_TIME LONG_MAX /* 参考Ueddy代码实现 */
int ColorTheCells::minimalTime(vector<int> dryingTime)
{
int num = dryingTime.size();
long minTime = INFINITY_TIME;
int i, j; this->dryingTime = dryingTime;
paint_order.clear(); /* paint 的顺序 */
dryedTime.clear(); for (i = 0; i < num; i++) {
paint_order.push_back(i);
dryedTime.push_back(0);
} /* brute force,枚举所有的情况,选出最小时间 */
do {
for (i = 0; i < (1<<num); i++) {
for (j = 0; j < num; j++) {
dryedTime[j] = 0;
}
minTime = min(minTime, calc(i));
}
} while (next_permutation(paint_order.begin(), paint_order.end())); return minTime;
} /**
* seq为一个序列,0表示在被paint位置左边paint, 1表示在右边paint,paint的顺序由
* paint_order指定。
*/
long ColorTheCells::calc(int seq)
{
long time; /* 所用时间 */
int num = dryingTime.size();
int paint_dir; /* paint方向,在被paint位置左边还是右边paint */
int cur_pos; /* 当前位置 */
int paint_pos; /* paint位置,不是被paint的位置 */
int bias; /* 从当前位置向左走还是向右走 */ cur_pos = 0;
time = 0;
for (int i = 0; i < num; i++) {
paint_dir = seq & 1;
seq /= 2;
paint_dir = paint_dir ? 1 : -1;
paint_pos = paint_order[i] + paint_dir;
if (paint_pos < 0 || paint_pos >= num) { /* 位置不合法 */
return INFINITY_TIME;
} bias = 1; /* 从当前位置向右走 */
if (cur_pos - paint_pos > 0) { /* 从当前位置向左走 */
bias = -1;
} /* 用for循环到达paint位置,中间遇到还没有干燥的格子要等待 */
for (; cur_pos != paint_pos; cur_pos += bias) {
if (dryedTime[cur_pos+bias] > time) { /* 等待干燥 */
time = dryedTime[cur_pos+bias];
}
time += MOVE_TIME; /* 移动时间 */
}
time += PAINT_TIME; /* 到达目的地,paint时间 */
dryedTime[paint_order[i]] = time + dryingTime[paint_order[i]]; /* 更新该格子干燥时间 */
} return time;
}
SRM 582 Div II Level Three: ColorTheCells, Brute Force 算法的更多相关文章
- SRM 582 Div II Level One: SemiPerfectSquare
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12580 比较简单,代码如下: #include <ios ...
- SRM 582 Div II Level Two SpaceWarDiv2
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12556 #include <iostream> # ...
- SRM 212 Div II Level Two: WinningRecord,Brute Force
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=3003&rd=5858 比较简单. 代码如下: #inc ...
- SRM 223 Div II Level Two: BlackAndRed,O(N)复杂度
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=3457&rd=5869 解答分析:http://comm ...
- SRM 207 Div II Level Two: RegularSeason,字符串操作(sstream),多关键字排序(操作符重载)
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=2866&rd=5853 主要是要对字符串的操作要熟悉,熟 ...
- SRM 577 Div II Level Two: EllysRoomAssignmentsDiv2
题目来源: http://community.topcoder.com/tc?module=ProblemDetail&rd=15497&pm=12521 这个问题要注意的就是只需要直 ...
- SRM 583 Div II Level One:SwappingDigits
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12609 #include <iostream> # ...
- SRM 583 Div II Level Three:GameOnABoard,Dijkstra最短路径算法
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12556 用Dijkstra实现,之前用Floyd算法写了一个, ...
- SRM 219 Div II Level One: WaiterTipping,小心约分
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12609&rd=15503 这题目看上去so easy, ...
随机推荐
- css3.0
css3.0相比css2.0多了些我们经常需要使用的标签属性,例如:圆角,个别圆角,不透明度,阴影特效等 1.圆角(即如何画圆)border-radius a{width:20px; height:2 ...
- word排版的一些小技巧积累
先准备好样式 编辑前,可以先根据要求,设置好样式,可以免去编辑好后,再修改格式(这样要改好多文本的格式) docx doc的样式不能通用. .docx转.doc 从word2013自带的编辑公式,编辑 ...
- UIAlertView、UIActionSheet兼容iOS8
链接地址:http://blog.csdn.net/nextstudio/article/details/39959895?utm_source=tuicool 1.前言 iOS8新增了UIAlert ...
- 安装Tomcat指定JDK(转)
一.应用实例 一般情况下一台服务器只跑一个业务,那么就直接配置一套环境,设置好Java环境变量即可.某些时候一台服务器上会安装多个业务,而且各个业务需要的JDK版本各不相同,或者为了使业务独立开来,需 ...
- urlrewrite 匹配规则之优先选择
urlrewrite rule可以使用java的正则表达式匹配规则,但是这里存在一个问题点,假如有一个通配的规则和一个精确匹配的规则,urlrewrite 会选择那个去匹配呢? 如下两种规则: < ...
- 分析一个socket通信: server/client
分析一个socket通信: server/client1 server 1. 创建一个server_socket文件,并绑定端口,然后监听端口 (socket, bind, listen) 2. 查询 ...
- django学习之Model(一)
认认真真学Django,从现在开始. 学习资料来源于官方网站:https://docs.djangoproject.com/en/1.6/ 1-新建一个models.py from django.db ...
- UTL_RAW
The UTL_RAW package provides SQL functions for manipulating RAW data types. 该包的功能其实可以用来加密: SELECT ...
- 基于visual Studio2013解决C语言竞赛题之0905文件读写显示
题目
- javascript每日一练(二)——javascript(函数,数组)
一.函数 什么是函数 function show(){}//不带参数 function show(){return 123;}//不带参数,有返回值 function show(arg1, arg2, ...