《入门经典》——6.26

乘船问题:

有n个人,第i个人重量为wi,每艘船的最大载重量均为C,且最多只能乘2个人。用最少的船装载所有人。

分析:显然这道题考查我们对贪心法的理解。在很多问题中,往往是贪心策略的给出很容易但是证明却比较困难。这里我们将给出证明来开始尝试掌握对算法正确性的证明的几种方法。

首先我们给出贪心策略,首先基于对n个人体重从小到大的排序,我们将没有上船的人设为集合A的元素。

从集合A中最小的元素i开始,令其上船。

如果A中没有元素能和i同船,那么令i单独一船。

否则,令能够和i乘船的所有元素中最大的那个元素j和其乘船。

贪心策略的证明:

考虑反证法,假设这种策略下我们得到的不是贪心策略,我们基于另外的最优解来开始进行讨论。

在假想的最优策略中

主要考虑一同乘船的i和k,则比存在某元素j,使得i+j≤n且k≤j,那么我们看到,如果将j和k交换,对于i乘坐的船必然不会受到影响,即贪心策略最起码会保留我们假想的最优解,同时,由于k比j小,存在这样的可能性,j原来单独乘船,但是k与其调换之后,可以使得另外的元素k’加入这条船,这就优化了我们假想的最优解,可见我们假想的最优解并不是最优解。

证毕。

时间: 2024-08-02 09:57:02

《入门经典》——6.26的相关文章

算法竞赛入门经典习题2-6 排列(permutation)

暴力解法: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int compare(const void *a, const void *b); 5 6 int main(int argc, char **argv){ 7 int i,j,k; 8 int arr[9]; 9 for(i=100;i<333;i++){ 10 for(j=200;j<666;j++){ 11 for(k=300;k<1000;k++){

《算法竞赛入门经典》动态规划复习

codevs 4979 数塔 1 #define N 100 2 #include<iostream> 3 using namespace std; 4 #include<cstdio> 5 int a[N][N],b[N][N],n; 6 int main() 7 { 8 scanf("%d",&n); 9 for(int i=1;i<=n;++i) 10 for(int j=1;j<=i;++j) 11 { 12 scanf("

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO

棋盘覆盖问题(算法竞赛入门经典)

在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,称该棋盘为一特殊棋盘.显然特殊方格在棋盘上出现的位置有 4^k 种情形.因而对任何 k>=0 ,有 4^k 种不同的特殊棋盘.下图所示的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个. 在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的所有方格,且任何 2 个 L 型骨牌不得重叠覆盖.易知,在任何一个 2^k * 2^k 的棋盘中,用到的 L 型

【算法竞赛入门经典】【第三章】课后习题(第二部分)

自从蓝桥杯之后,都没写博客了.今天将之前第三章还差的一部分习题答案补上. 3-4整数相加 这一题题目有提示,说选择合适的输入方式,即可简化问题.刚开始没想到cin,结果还用字符串来做,多亏别人提醒我一下,我才想起cin.惭愧啊.. #include <iostream> using namespace std; int main() { int a,b; char op; while(cin>>a>>op>>b){ switch(op){ case '+':

Hadoop入门经典:WordCount

以下程序在hadoop1.2.1上测试成功. 本例先将源代码呈现,然后详细说明执行步骤,最后对源代码及执行过程进行分析. 一.源代码 package org.jediael.hadoopdemo.wordcount; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path;

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

拓扑排序(算法竞赛入门经典)

拓扑排序的定义: 把每个变量看成一个点,”小于“或者”先后“关系看成有向边,则我们得到一个有向图.这样我们的任务实际上是把一个图的所有节点排序,使每一条有向边的(u,v)对应的u都排在v之前,在图论中,我们称之为拓扑排序.不难发现,如果一个有向图里存在回路,则不存在拓扑排序(如果设置一个标志数组,我们可以发现回路中的点一直处于正在被访问状态,这可以作为拓扑排序的结束条件). 我们先看一个样例: 下面我们用邻接矩阵存储这张图:   0 1 2 3 0 0 1 1 1 1 0 0 1 1 2 0 0

HTML、XHTML、CSS与JavaScript入门经典pdf

下载地址:网盘下载 内容介绍: 自从网站诞生以来,用于构建网站的语言就一直在不断地演化.现在一系列最佳实践已经出现,使用HTML或XHTML创建基本的网页,使用CSS控制它们的外观并使它们更加引人注目,使用JavaScript添加交互功能.<HTML.XHTML.CSS与JavaScript入门经典>一书假设您以前没有任何经验,这些宝贵的资源有助于如何使用最新的Web标准.不管您是期待编写第一个网页的初学者,还是急需提升编程技能的资深程序员,都会发现对这些基本语言的实践指导,以及有经验的Web

HTML与CSS入门经典(第7版) PDF下载高清完整原版

需要学习的朋友可以通过网盘免费下载pdf版 http://putpan.com/fs/7yi6be2ns3hucc8a1/ 内容简介  · · · · · · 梅洛尼.莫里森编著的<HTML与CSS入门经典(第8版)>是畅销图书 <HTML与CSS入门经典>的最新版,和过去的版本相同,本书仍然采用直观 .循序渐进的方法来为读者讲解使用HTML与CSS创建并发布网页的过程,以 方便读者掌握.<HTML与CSS入门经典(第8版)>总共分为24章和1个附录 ,其涵盖的内容有理