2013年6月16日, 下午10:42
问题描述:
- 设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程。
编程思想:
假设n位选手被顺序编号为1,2,3,…,n,比赛的日程表是一个n行n-1列的表格,i行j列的表格内容是第i号选手在第j天的比赛对手。根据分而治之的原则,可从其中一半选手(2^(n-1位)的比赛日程,导出全体n位选手的日程,最终细分到只有两位选手的比赛日程出发。可假设只有8位选手参赛,若1至4号选手之间的比赛日程填在日程表的左上角(4行3列),5至8号选手之间的比赛日程填在日程表的左下角(4行3列);那么左下角的内容可由左上角的对应项加上数字4得到。至此,剩余的右上角(4行4列)是为编号小的1至4号选手与编号大的5至8号选手之间的比赛日程安排。例如,在第4天,让1至4号选手分别与5至8号选手比赛,以后各天,依次由前一天的日程安排,让5至8号选手“循环轮转”即可。最后,比赛日程表的右下角的比赛日程表可由,右上角的对应项减去数字4得到。
具体实现:
Continue reading ‘循环赛日程安排分治法分析’ »
Category:
数据结构与算法 |
循环赛日程安排分治法分析已关闭评论
2013年6月14日, 下午9:06
问题:
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为:
Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,当(a1,a2,a3,a4,a4,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为20
下面列出了四种计算方式,时间复杂度各逐渐变小,其中动态规划法时间复杂度最小。
Continue reading ‘最大子段和算法分析’ »
2013年6月13日, 下午5:05
题目很简单,完成函数reverse,要求实现把给定的一个整数取其相反数的功能,举两个例子如下: x = 123, return 321 x = -123, return -321
规则:
1.完成功能函数即可。
下面是我用C写的,用C++其实也一样。
[php]
int reverse(int x) {
int result = 0;
do {
int temp = x % 10;
result = result * 10 + temp;
} while ((x /= 10) != 0);
return result;
}
int main()
{
int num = 0;
scanf("%d", &num);
printf("%d\n", reverse(num));
return 0;
}
[/php]
这个是C++的
Continue reading ‘整数取反,颠倒位置’ »
Category:
C++ |
整数取反,颠倒位置已关闭评论
2013年6月11日, 下午9:04
在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
分治法所能解决的问题一般具有以下几个特征:
1) 该问题的规模缩小到一定的程度就可以容易地解决
2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
3) 利用该问题分解出的子问题的解可以合并为该问题的解;
4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
Continue reading ‘分治法排序’ »
2013年6月5日, 下午11:08
c++允许隐式转换,没有加入explicit限定符的都看作是能够实现隐式转换的,但有些时候不期望这样做。
例如:
[php]
class CBook
{
public:
CBook(std::string name) : m_name(name), m_width(0), m_height(10) {}
int Compare(CBook& book);
std::string m_name;
int m_width;
int m_height;
};
CBook book1("book1");
book1.m_width = 10;
book1.m_height = 20;
int result = book1.Compare("book2");
[/php]
在这里调用Compare函数时,本来是需要CBook参数的,但由于CBook的构造函数参数是std::string,这里编译器自动使用”book2″临时构造一个CBook对象,同时将这个临时对象传给Compare函数,并在离开Compare函数时自动析构,这就是隐式转换的过程。
Continue reading ‘explicit防止隐式转换’ »
Category:
C++ |
explicit防止隐式转换已关闭评论
2013年6月1日, 下午5:09
boost库一款非常优秀的c++库,文档非常完善,鼓励商业或非商业使用,开源免费,被称为准标准库,下面介绍它在windows下的编译过程。
现在最新的boost库版本是1_53_0,可以在其官方网站下载,解压后,可以打开boost_1_53_0目录下的index.html文件,这里面对boost库进行了详细的说明,包括boost的安装,在文档的Getting Started on Windows中描述了使用MSVC的Command Prompt进行编译的过程。
例如我的机器安装了Visual Studio 2005,在开始菜单中打开Microsoft Visual Studio 2005 > Visual Studio Tools > Visual Studio 2005 Command Prompt。
然后使用命令行进入boost_1_53_0的目录,并执行以下命令
[php]
bootstrap
[/php]
这个步骤是安装boost库编译程序,最后会在boost_1_53_0目录下生成b2.exe程序,生成了b2.exe后,再执行
[php]
b2 –build-type=complete
[/php]
这个步骤就是编译boost库了,编译完成后,会在boost_1_53_0的stage目录中找到生成的lib文件,如boost_date_time-vc80-mt-gd-1_53.lib,其中vc80表示是vs2005版本的。
Continue reading ‘boost的windows编译’ »
Category:
开源工具库 |
boost的windows编译已关闭评论
2013年5月23日, 下午8:11
在学习使用SDL+FFMPEG来制作简易播放器时,发现将图像显示到指定窗口上时,颜色会出现失真情况,设置窗口大小代码如下:
[php]
RECT wrect;
GetWindowRect((HWND)m_hwnd, &wrect);
m_nWidth = wrect.right – wrect.left;
m_nHeight = wrect.bottom – wrect.top;
m_surface = SDL_SetVideoMode(m_nWidth, m_nHeight, 0, 0);
[/php]
Continue reading ‘使用SDL+FFMPEG将视频绑定到指定窗口显示颜色失真’ »
2013年5月14日, 下午8:19
某些时候,需要监测程序异常退出的问题,可以使用生成core文件方式来定位问题
使用以下命令查看是否启用了core文件生成
[php]
ulimit -a
[/php]
Continue reading ‘linux设置启用生成core文件’ »
Category:
Linux |
linux设置启用生成core文件已关闭评论
2013年5月14日, 下午2:18
在linux的终端中使用ssh命令可以登陆到远程机器,若需要上传或下载文件的话,可以使用scp命令。
如要登陆到192.168.1.10的linux机器时,在本机使用ssh 192.168.1.10,回车后按提示输入用户名密码,登陆成功。
若需要上传文件,如要将本机的/home/a.txt上传到192.168.1.22机器上的/opt/目录中,则使用以下命令
[php]
scp /home/a.txt root@192.168.1.22:/opt/
[/php]
然后按提示输入root用户的密码
若需要下载文件,如要将远程机器中的/etc/test.txt下载到本南的/home/目录中,则使用以下命令
[php]
scp root@192.168.1.22:/etc/test.txt /home/
[/php]
然后按提示输入root用户的密码
Category:
Linux |
linux使用SSH协议上传下载文件已关闭评论
2013年5月14日, 下午1:52
今天编写程序时,某个工程需要用到互斥锁,而ACE正好有这个函数,在成员变量中加入下面这句:
[php]
private:
ACE_Recursive_Thread_Mutex m_listBuffLock;
[/php]
编译链接的时候报以下错误:
[php]
1>Linking…
1> Creating library ../lib/MediaConverterModule.lib and object ../lib/MediaConverterModule.exp
1>MediaConverter.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall ACE_Recursive_Thread_Mutex::release(void)" (__imp_?release@ACE_Recursive_Thread_Mutex@@QAEHXZ)
1>MediaConverter.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall ACE_Recursive_Thread_Mutex::acquire(void)" (__imp_?acquire@ACE_Recursive_Thread_Mutex@@QAEHXZ)
1>MediaConverter.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall ACE_Recursive_Thread_Mutex::~ACE_Recursive_Thread_Mutex(void)" (__imp_??1ACE_Recursive_Thread_Mutex@@QAE@XZ)
1>MediaConverter.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall ACE_Recursive_Thread_Mutex::ACE_Recursive_Thread_Mutex(wchar_t const *,struct ACE_mutexattr_t *)" (__imp_??0ACE_Recursive_Thread_Mutex@@QAE@PB_WPAUACE_mutexattr_t@@@Z)
1>../bin_release/MediaConverterModule.dll : fatal error LNK1120: 4 unresolved externals
[/php]
Continue reading ‘ACE链接错误解决办法’ »
Category:
C++ |
ACE链接错误解决办法已关闭评论