#include <stdio.h>
#include <stdlib.h> #define N 6
#define V 100 typedef struct box // 使用 typedef 来为用户自定义的数据类型box取一个新的名字BOX
{
int no;
int size;
struct box* next;
}BOX;
// 使用访问结构的指针访问结构的成员
void init_list(BOX** H) // 声明了一个指向 BOX 类型指针的指针 *H为一级指针,&(*H)为一级指针的地址,即将一级指针的地址赋值给二级指针H
*H = (BOX*)malloc(sizeof(BOX)); // H表示一级指针的地址,*H表示一级指针的值,**H表示普通变量的值,由于一级指针指向结构体BOX,故可以通过一级指针访问结构的成员
(*H)->no = 0;
(*H)->size = 0;
(*H)->next = NULL;
} BOX* find_p(BOX* H, int volume, int v)
{
BOX* p = H->next; // 一开始,由于H->next为NULL,故p为空指针.第二轮,由于H->next不为空,故将p指针指向H->next指针指向的对象即(1,60,NULL)
while(p!=NULL)
{
if(p->size+volume <= v) // 60+45>100,不执行
break; p = p->next; //第二轮,p=NULL
} return p;
}
//让q指针指向H指针指向的对象,通过q指针访问H指针指向的对象的成员,由于H指针指向对象的成员也是一个BOX类型的指针,然后让H指针指向对象的成员next指向p指针指向的对象(1,60,NULL)
void add_list_tail(BOX* H, BOX* p) // H,p均为一级指针,H指针指向(0,0,NULL),p指针指向(1,60,NULL)
{
BOX* tmp = H->next; // H->next为NULL,此时tmp为空指针
BOX* q = H; // q指针指向H指针指向的对象 while(tmp!=NULL)
{
q = tmp;
tmp = tmp->next;
} q->next = p; //q为一级指针,q->next表示结构体的成员,即一级指针指向p指针指向的对象,此时两个对象相连
} void print_list(BOX* H)
{
BOX* p = H->next;
while(p!=NULL)
{
printf("%d:%d\n", p->no, p->size);
p = p->next;
}
} int add_box(int volume[], int v)
{
int count = 0;
int i;
BOX* H = NULL; //定义一个Box型的指针,指针的值为NULL,即空指针 init_list(&H); for(i=0;i<N;i++)
{
BOX* p = find_p(H, volume[i], v); // 一级指针p指向结构体
if(p==NULL)
{
count++;
p = (BOX*)malloc(sizeof(BOX));
p->no = count; // 通过一级指针给结构体成员赋值 1
p->size = volume[i]; // 60
p->next = NULL; //NULL,此时p指针指向(1,60,NULL)结构体,H指针指向(0,0,NULL)
add_list_tail(H, p); //此时H指向的对象的成员next指向p指针指向的成员
}
else
{
p->size += volume[i]; //第二轮,将两个数相加
}
} print_list(H); return count;
} int main(int argc, char *argv[])
{
int ret;
int volumes[] = {60, 45, 35, 20, 20, 20}; ret = add_box(volumes, V); printf("%d\n", ret); system("PAUSE");
return 0;
}

装箱问题注意事项:

1、n中物品要从大到小排号序。

2、先装大的,再从大到小装小的,两个数相加不大于100即可。

3、每只箱子所装物品用链表来表示,

C语言:贪心算法之装箱问题的更多相关文章

  1. C语言 · 贪心算法

    发现蓝桥杯上好多题目涉及到贪心,决定学一学. 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说:不从整体最优上考虑,而是在某种意义上的局部最优解.其关键是贪心策略的选择,选择的贪心 ...

  2. C语言词法分析中的贪心算法

    C语言词法分析中的贪心算法 当我们写出a---b这种语句的时候我们应该考虑C语言的编译器是如何去分析这条语句的. C语言对于解决这个问题的解决方案可以归纳为一个很简单的规则:每一个符号应该包含尽可能多 ...

  3. #C++初学记录(贪心算法#结构体#贪心算法)

    贪心算法#结构体 Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋 ...

  4. 组合优化学习笔记<之>从贪心算法到子集系统再到拟阵

    贪心算法是用的比较多的一种优化算法,因为它过程简洁优美,而且结果有效.有些优化问题如最大权森林(MWF)是可以用贪心问题求解的,由于最小支撑树(MST)问题与MWF是等价的,所以MST也是可以用贪心算 ...

  5. [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)

    1 Dijkstra算法 1.1 算法基本信息 解决问题/提出背景 单源最短路径(在带权有向图中,求从某顶点到其余各顶点的最短路径) 算法思想 贪心算法 按路径长度递增的次序,依次产生最短路径的算法 ...

  6. [C++]多源最短路径(带权有向图):【Floyd算法(动态规划法)】 VS n*Dijkstra算法(贪心算法)

    1 Floyd算法 1.1 解决问题/提出背景 多源最短路径(带权有向图中,求每一对顶点之间的最短路径) 方案一:弗洛伊德(Floyd算法)算法 算法思想:动态规划法 时间复杂度:O(n^3) 形式上 ...

  7. [C++]哈夫曼树(最优满二叉树) / 哈夫曼编码(贪心算法)

    一 哈夫曼树 1.1 基本概念 算法思想 贪心算法(以局部最优,谋求全局最优) 适用范围 1 [(约束)可行]:它必须满足问题的约束 2 [局部最优]它是当前步骤中所有可行选择中最佳的局部选择 3 [ ...

  8. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

  9. 算法导论----贪心算法,删除k个数,使剩下的数字最小

    先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...

随机推荐

  1. CentOS7.X安装英伟达显卡采坑之路

    1.系统信息 操作系统版本:CentOS7.X 显卡版本:英伟达 Tesla P100 其他软件包安装信息: CUDA 9.0 CUDNN 7.4.2.24 lightgbm 2.2.X Boost ...

  2. 【从零开始撸一个App】RecyclerView的使用

    目标 前段时间打造了一款简单易用功能全面的图片上传组件,现在就来将上传的图片以图片集的形式展现到App上.出于用户体验考虑,加载新图片采用[无限]滚动模式,Android平台上我们优选Recycler ...

  3. 烧录失败导致boot无法加载的解决措施,再也不怕烧成砖了

    目录: 1.usb烧录时出现的问题截图 2.重新擦除boot发现失败的情况 3.解决措施 烧录失败导致boot无法加载的解决措施在烧录系统的时候经常会遇到烧录失败的情况,如果能通过再次执行烧录能烧上肯 ...

  4. hdu 6681 Rikka with Cake(扫描线)

    题意:给你一个n*m的的矩形框 现在又k条射线 问这个矩形框会被分为多少个区域 思路:之前的想法是枚举边界然后线段树扫一遍计算一下矩形个数 复杂度果断不行 后面发现其实答案就是交点数+1 然后就用线段 ...

  5. 【poj 2407】Relatives(数论--欧拉函数 模版题)

    题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质:    1.若p是质数,Φ(p)=p-1:    2.欧拉函数是积性函 ...

  6. URAL - 1029 dp

    题意: n层楼,每层楼有m个房间.找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数. 题解: 参考链接: ...

  7. hdu5414 CRB and String

    Problem Description CRB has two strings s and t. In each step, CRB can select arbitrary character c  ...

  8. GoAccess 监控工具

    GoAccess 基本概述 简易的统计访问量的软件,官方安装教程 GoAccess 安装 # 下载包 [root@web01 ~]# wget http://tar.goaccess.io/goacc ...

  9. Go语言中时间轮的实现

    最近在工作中有一个需求,简单来说就是在短时间内会创建上百万个定时任务,创建的时候会将对应的金额相加,防止超售,需要过半个小时再去核对数据,如果数据对不上就需要将加上的金额再减回去. 这个需求如果用Go ...

  10. 缓冲区溢出实验 1 strcpy

    实验代码 https://github.com/TouwaErioH/security/tree/master/stack%20overflow 实验目的 Buffer over flow 漏洞利用实 ...