USACO 1.4 Mother's Milk

本文探讨了通过BFS算法解决三个杯子互相倒水的问题,目标是在特定条件下找到A空杯时C杯中的牛奶量序列。

比较经典的3个杯子互相倒水的问题。

状态即3个杯子中的水量,用一个3维数组记录,转移为六种组合。

ContractedBlock.gifExpandedBlockStart.gifcode
1 /*
2 ID: superbi1
3 LANG: C
4 TASK: milk3
5  */
6 //BFS
7 //三个杯子A,B,C 刚开始,C中milk满的,然后根据规则倒,问A为空时的C的milk量的序列
8 #include <stdio.h>
9 #include <string.h>
10 #include <stdlib.h>
11
12 //其实可以用三维数组记录状态
13 char flg[1000000];
14
15 main()
16 {
17 FILE *fin = fopen("milk3.in", "r");
18 FILE *fout = fopen("milk3.out", "w");
19 int a, b, c;
20 int milk[21];
21 int start = c;
22 int que[1000], top = 0, mk;
23 int cur;
24 int I, a0, b0, c0, a1, b1, c1;
25 fscanf(fin, "%d%d%d", &a, &b, &c);
26 memset(flg, 0, sizeof(flg));
27 que[top++] = c;
28 flg[c] = 1;
29 for (I=0; I<21; I++) milk[I] = 0;
30 while (top > 0) {
31 cur = que[--top];
32 if (!(cur/10000)) {
33 milk[cur%100] = 1;
34 }
35 a0 = cur/10000;
36 b0 = (cur%10000)/100;
37 c0 = cur%100;
38 a1 = a0;
39 b1 = b0;
40 c1 = c0;
41 //枚举六种倒的情况
42 if (a1 > 0) {
43 if (b1 < b) {
44 if (b-b1 < a1) {
45 a1 -= b-b1;
46 b1 = b;
47 }else {
48 b1 += a1;
49 a1 = 0;
50 }
51 if (!flg[a1*10000+b1*100+c1]) {
52 flg[a1*10000+b1*100+c1] = 1;
53 que[top++] = a1*10000+b1*100+c1;
54 }
55 }
56 a1 = a0;
57 b1 = b0;
58 c1 = c0;
59 if (c1 < c) {
60 if (c-c1 < a1) {
61 a1 -= c-c1;
62 c1 = c;
63 }else {
64 c1 += a1;
65 a1 = 0;
66 }
67 if (!flg[a1*10000+b1*100+c1]) {
68 flg[a1*10000+b1*100+c1] = 1;
69 que[top++] = a1*10000+b1*100+c1;
70 }
71 }
72 }
73
74 a1 = a0;
75 b1 = b0;
76 c1 = c0;
77 if (b1 > 0) {
78 if (a1 < a) {
79 if (a-a1 < b1) {
80 b1 -= a-a1;
81 a1 = a;
82 }else {
83 a1 += b1;
84 b1 = 0;
85 }
86 if (!flg[a1*10000+b1*100+c1]) {
87 flg[a1*10000+b1*100+c1] = 1;
88 que[top++] = a1*10000+b1*100+c1;
89 }
90 }
91 a1 = a0;
92 b1 = b0;
93 c1 = c0;
94 if (c1 < c) {
95 if (c-c1 < b1) {
96 b1 -= c-c1;
97 c1 = c;
98 }else {
99 c1 += b1;
100 b1 = 0;
101 }
102 if (!flg[a1*10000+b1*100+c1]) {
103 flg[a1*10000+b1*100+c1] = 1;
104 que[top++] = a1*10000+b1*100+c1;
105 }
106 }
107 }
108
109 a1 = a0;
110 b1 = b0;
111 c1 = c0;
112 if (c1 > 0) {
113 if (a1 < a) {
114 if (a-a1 < c1) {
115 c1 -= a-a1;
116 a1 = a;
117 }else {
118 a1 += c1;
119 c1 = 0;
120 }
121 if (!flg[a1*10000+b1*100+c1]) {
122 flg[a1*10000+b1*100+c1] = 1;
123 que[top++] = a1*10000+b1*100+c1;
124 }
125 }
126 a1 = a0;
127 b1 = b0;
128 c1 = c0;
129 if (b1 < b) {
130 if (b-b1 < c1) {
131 c1 -= b-b1;
132 b1 = b;
133 }else {
134 b1 += c1;
135 c1 = 0;
136 }
137 if (!flg[a1*10000+b1*100+c1]) {
138 flg[a1*10000+b1*100+c1] = 1;
139 que[top++] = a1*10000+b1*100+c1;
140 }
141 }
142 }
143 }
144 mk = 0;
145 for (I=0; I<21; I++) {
146 if (milk[I]) {
147 if (!mk) { fprintf(fout, "%d", I); mk = 1; }
148 else fprintf(fout, " %d", I);
149 }
150 }
151 fprintf(fout, "\n");
152 exit(0);
153 }

 

转载于:https://www.cnblogs.com/superbin/archive/2010/05/22/1741634.html

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 64480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值