当前位置: 首页 > news >正文

2014药柜设计问题

1 题目描述

D题 储药柜的设计
储药柜的结构类似于书橱,通常由若干个横向隔板和竖向隔板将储药柜分割成若干个储药槽(如图1所示)。为保证药品分拣的准确率,防止发药错误,一个储药槽内只能摆放同一种药品。药品在储药槽中的排列方式如图2所示。药品从后端放入,从前端取出。一个实际储药柜中药品的摆放情况如图3所示。
为保证药品在储药槽内顺利出入,要求药盒与两侧竖向隔板之间、与上下两层横向隔板之间应留2mm的间隙,同时还要求药盒在储药槽内推送过程中不会出现并排重叠、侧翻或水平旋转。在忽略横向和竖向隔板厚度的情况下,建立数学模型,给出下面几个问题的解决方案。

1. 药房内的盒装药品种类繁多,药盒尺寸规格差异较大,附件1中给出了一些药盒的规格。请利用附件1的数据,给出竖向隔板间距类型最少的储药柜设计方案,包括类型的数量和每种类型所对应的药盒规格。

2. 药盒与两侧竖向隔板之间的间隙超出2mm的部分可视为宽度冗余。增加竖向隔板的间距类型数量可以有效地减少宽度冗余,但会增加储药柜的加工成本,同时降低了储药槽的适应能力。设计时希望总宽度冗余尽可能小,同时也希望间距的类型数量尽可能少。仍利用附件1的数据,给出合理的竖向隔板间距类型的数量以及每种类型对应的药品编号。

3. 考虑补药的便利性,储药柜的宽度不超过2.5m、高度不超过2m,传送装置占用的高度为0.5m,即储药柜的最大允许有效高度为1.5m。药盒与两层横向隔板之间的间隙超出2mm的部分可视为高度冗余,平面冗余=高度冗余×宽度冗余。在问题2计算结果的基础上,确定储药柜横向隔板间距的类型数量,使得储药柜的总平面冗余量尽可能地小,且横向隔板间距的类型数量也尽可能地少。

4. 附件2给出了每一种药品编号对应的最大日需求量。在储药槽的长度为1.5m、每天仅集中补药一次的情况下,请计算每一种药品需要的储药槽个数。为保证药房储药满足需求,根据问题3中单个储药柜的规格,计算最少需要多少个储药柜。

图1 储药柜立体示意图

图2 储药柜的侧剖面及药品摆放示意图

图3 储药槽药品摆放情况

2 问题的分析

这个题目我们只需要解决掉第一题就好了

问题的分析
审题
为保证药品在储药槽内顺利出入,要求药盒与两侧竖向隔板之间、与上下两层横向隔板之间应留2mm的间隙,同时还要求药盒在储药槽内推送过程中不会出现并排重叠、侧翻或水平旋转。

首先我们来分析一下这个重叠,侧翻和水平旋转

重叠是什么意思呢?
首先我们先设置这个药盒和药柜的长宽高
已知药盒长宽高分别是a , b , c毫米,设计储药槽长宽高分别是x , y , z毫米

这两个示意图分别代表的是不同状态下的药盒
1 重叠所需要的条件:
重叠我只画出来了一个样例还有一个数值重叠的,那么我们就要弄出两个情况
一个是宽的,一个是高的
z < 2a y < 2b
 

2 侧翻所需要的条件
侧翻我们有两个情况一个是基于宽的侧翻,一个是基于高的侧翻,那么我们就有两个条件就是
 

考虑情况1:不能完全能侧翻
z < (b^2 + c^2)^0.5 + M( 1 - u )
y < (b^2 + c^2)^0.5 + M( 1 - v )
u + v >= 1, u,v属于{0,1}
M = (b^2 + c^2)^0.5

 

考虑情况2:极限角的情况
并且侧翻时侧面解刨图来看,长方形的一个点会和储药槽底部接触,模拟物体旋转过程发现当长方形的对角线和底部垂直时候,整个物体触顶高度达到最高值。也就是说如果储药槽设计高度低于物体的对角线长度物体将无法侧翻

这里的极限角就是为45度,所以我们就用45度来些就好了
z < (b^2 + c^2)^0.5 + M( 1 - u )
y < 2^0.5 / 2 * (b + c) + M( 1 - v )
u + v >= 1, u,v属于{0,1}
M = max((b^2 + c^2)^0.5 , 2^0.5 / 2 * (b + c))

3.水平旋转

实际上和侧翻的情况一类似,只是宽和高变成了长和宽
设物体水平旋转了α度就称为水平旋转了
 


y < b*cosα + acos(Π/2 - α),我们根据上述的内容可以的出这个结论

还有一个就是2mm间隙的问题了就是宽和高度
要求药盒与两侧竖向隔板之间、与上下两层横向隔板之间应留2mm的间隙
那么我们就有了这个条件
z = c+2 y = b+2

3 第一问分析(利用上述条件)

1. 药房内的盒装药品种类繁多,药盒尺寸规格差异较大,附件1中给出了一些药盒的规格。请利用附件1的数据,给出竖向隔板间距类型最少的储药柜设计方案,包括类型的数量和每种类型所对应的药盒规格
我们根据上述的条件,来进行求解这个问题,首先我们要用到这个侧翻,重叠还有水平旋转的问题
那么我们就有了这个

1 重叠,水平旋转和侧翻条件的使用

{ 2.0 * weight[i],sqrt(weight[i] * weight[i] + height[i] * height[i]), sqrt(weight[i] * weight[i] + length[i] * length[i]) }

我们就有了这么个集合来求取最小的哪一个,因为我们分析上述的条件了
分别为重叠,侧翻和水平旋转,我们选取其中的最小值就可以接触这个东西啦

2 2mm柜子的妙用
我们在求解这个问题的时候,要面临的是我们一共有多少种柜子,因为我们要把这个些药柜进行放置,这样才可以把这些药盒存储到合适的药柜,这就要用到上述的一个条件了2mm,我们把所有宽度的药柜+2mm,然后我们就可以像类似于筛子一样把这个"过滤",就可以得到不同的宽度,同时这也是我们药柜的宽度

那么我们要怎么把这个药柜进行筛选呢?
我们可以用到这个C++的set,因为这个东西插入进去可以自动的把这个多余的柜子给过滤掉

#include<iostream>
#include<algorithm>
#include<set>
#include<fstream>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
const int N = 10000;
const int MAX_ROWS = 10000;  // 最大行数
int weight[1990];
int height[1990];
int length[1990];
ofstream outFile;void solve() {outFile.open("E:data.xlsx");if (!outFile.is_open()) {std::cerr << "无法打开文件" << std::endl;return;}set<double>y;double a[N], b[N];for (int i = 1;i <= 1919;i++) {a[i] = 2 + weight[i];y.insert(a[i]);b[i] = min({2.0 * weight[i],sqrt(weight[i] * weight[i] + height[i] * height[i]), sqrt(weight[i] * weight[i] + length[i] * length[i])});b[i] = (int)b[i];}for (int i = 1;i <= 1919;i++) {outFile << a[i] << '\t';}outFile << '\n';for (int i = 1;i <= 1919;i++) {outFile << b[i] << '\t';}outFile << '\n';cout << (int)y.size();for (auto x : y) {outFile << x << '\t';}
}// 从 CSV 读取数据
int readCSV(const string& filename) {ifstream file(filename);if (!file.is_open()) {cerr << "错误:无法打开文件 " << "yao.csv" << endl;return 0;}string line;int row = 1;getline(file, line);while (getline(file, line) && row < MAX_ROWS) {stringstream ss(line);string value;getline(ss, value, ',');// 读取 weight (第2列)getline(ss, value, ',');length[row] = stoi(value);// 读取 height (第3列)getline(ss, value, ',');height[row] = stoi(value);// 读取 length (第4列)getline(ss, value, ',');weight[row] = stoi(value);row++;}file.close();return row;  // 返回读取的行数
}int main() {readCSV("yao.csv");solve();return 0;
}

这里有三个函数,1 读取CSV文档 2 main函数 3 编写范围和知晓柜子一共有多少种
这个CSV可以用作一个模板以后用

这样我们就顺利利用了上述的条件,接下来就是求解

4 问题1的求解(LINGO求解)

我们根据上述的条件构建一个模型

问题所需的答案
给出竖向隔板间距类型最少的储药柜设计方案,包括类型的数量和每种类型所对应的药盒规格。

判决式
就是求取fi最小的和,也就是药柜选取最小的和是多少

约束条件
fi为这个药柜选择还是不选择 gij表示第i个药盒能否在第j个药柜里面进行装入
约束条件1:我们选取的这个药柜要在这个ai和bi的范围之内(ai表示的是这个药柜最小的取值,bi表示最大的取值)如果这个时候,这个药柜是可以在该药柜下,也可以不在该药柜下,它是自由的,就是让这个LINGO自己去判断这个自由下,还是约束下,这个药柜所存的是最小的,也就是扩大范围和不扩大范围(总的来说就是,我可以选择当下所约束的药柜,但是我们为了去求取最小的值,也可以不选这个药柜,去找之前选取过的药柜使得这个最后的药柜的类型是最小的
约束条件2:这个表示每一个药盒都要至少有一个药柜进行装入

约束条件3:表示这个这个fi和gij为0-1变量

LINGO求解

sets:aa/1..1919/:a,b;bb/1..47/:f,y;cc(aa,bb):g;
endsetsdata:a = @OLE("E:\数学建模\题目\储药柜的设计\data.xlsx",A1:BUU1);b = @OLE("E:\数学建模\题目\储药柜的设计\data.xlsx",A2:BUU2);y = @OLE("E:\数学建模\题目\储药柜的设计\data.xlsx",A3:AU3);
enddatamin=@sum(bb(j):f(j));
@for(cc(i,j):@bin(g(i,j)));
@for(bb(i):@bin(f(i)));
@for(aa(i):@for(bb(j):a(i)*g(i,j)< y(j)*f(j)));
@for(aa(i):@for(bb(j):y(j)*f(j) < b(i) + 50*(1 - g(i,j))));
@for(aa(i):@sum(bb(j):g(i,j)) > 1);

最后求解的答案

  Global optimal solution found.Objective value:                              4.000000Objective bound:                              4.000000Infeasibilities:                              0.000000Extended solver steps:                               0Total solver iterations:                            27

5 问题1的求解(C++求解)

首先我们要进行C++求解,就要知道这个怎么进行求解
问题所需的答案
给出竖向隔板间距类型最少的储药柜设计方案,包括类型的数量和每种类型所对应的药盒规格
药柜的设计方案,数量和每一种类型所要放的药盒规格

这个问题我们可以用贪心算法进行求解,由局部最优到全局最优

首先我们要对原本的数据进行调整,就是进行排序
为什么要进行排序处理呢?我们知道贪心的思想是局部最优到全局最优,那么我们就从小往大排序,首先是最小的进行从小到大排序,然后如果一样的话,那么就是对最大值从小往大排序,编号是用来输出最后的药盒是在哪一个药柜的
 


首先就是不断地扫描,当由这个最大的装不下这个药柜了那么就要进行更换了,要知道越往后的药柜,它的最大范围的那个范围值是很大的,所以我们只需要利用每一次不满足了这个最小值<这个我们一开始选择的最大值,那么就要进行换个最大值了,选择别的大药柜进行装,如果到了后面开关还是false,直接就是选择58就好了

#include<iostream>
#include<algorithm>
#include<set>
#include<fstream>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
//三元组
#include <tuple>
using namespace std;
const int N = 10000;
const int MAX_ROWS = 10000;  // 最大行数
int weight[1990];
int height[1990];
int length[1990];set<double>y;        //一共有几个类型的药柜
double a[N], b[N];   //最小宽度和最大宽度set<double>test;int st[50][N];       //表示这个药盒子是否有柜子装着
int f[50];           //表示这个药柜数量
double yaogui[50];       //set类型转化位数组(便于操作)
int maxres;vector<tuple<double, double,double>> v;
int minsum = 1e8;void solve() {//一定要定义大小,要不然会报段错误v.resize(1919);for (int i = 1;i <= 1919;i++) {a[i] = 2 + weight[i];y.insert(a[i]);b[i] = min({ 2.0 * weight[i],sqrt(weight[i] * weight[i] + height[i] * height[i]), sqrt(weight[i] * weight[i] + length[i] * length[i]) });b[i] = (int)b[i];get<0>(v[i - 1]) = a[i];get<1>(v[i - 1]) = b[i];get<2>(v[i - 1]) = i;}int count = 1;for (auto i = y.begin(); i != y.end(); ++i) {yaogui[count++] = *i;}cout << y.size() << endl;
}// 从 CSV 读取数据
int readCSV(const string& filename) {ifstream file(filename);if (!file.is_open()) {cerr << "错误:无法打开文件 " << "yao.csv" << endl;return 0;}string line;int row = 1;getline(file, line);while (getline(file, line) && row < MAX_ROWS) {stringstream ss(line);string value;getline(ss, value, ',');// 读取 weight (第2列)getline(ss, value, ',');length[row] = stoi(value);// 读取 height (第3列)getline(ss, value, ',');height[row] = stoi(value);// 读取 length (第4列)getline(ss, value, ',');weight[row] = stoi(value);row++;}file.close();return row;  // 返回读取的行数
}void solve_1() {std::sort(v.begin(), v.end(), [&](const std::tuple<int, int, int>& x, const std::tuple<int, int, int>& y) {if (std::get<0>(x) == std::get<0>(y)) { // 如果第一个元素相同return std::get<1>(x) < std::get<1>(y); // 按第二个元素排序}return std::get<0>(x) < std::get<0>(y); // 按第一个元素排序});int cnt = 1;int start = 0;  int end = 0;vector<pair<int, int>> ans;vector<int> yao;while (cnt <= 1919) {auto& t = v[start];double x = get<1>(t);cnt++;bool flage = false;for (int i = start; i < v.size(); i++) {auto& t1 = v[i];double x1 = std::get<0>(t1);if (x1 > x) {end = i;flage = true;break;}double x4 = get<2>(t1);yao.push_back(x4);}if (flage == true) {auto& t2 = v[start];double x2 = std::get<1>(t2);cout << x2 << " " << "下面为该药柜的存储的药的编号:" << endl;ans.push_back(make_pair(x2, x));for (int i = 0; i < yao.size(); i++) {cout << yao[i] << " ";}yao.clear();cout << endl;cout << endl;}else if (flage == false) {auto& t3 = v[v.size()-1];double x3 = std::get<1>(t3);cout << x3 << " " << "下面为该药柜的存储的药的编号:" << endl;ans.push_back(make_pair(x3, x));for (int i = 0; i < yao.size(); i++) {cout << yao[i] << " ";}yao.clear();cout << endl;cout << endl;break;}start = end + 1;}cout << ans.size() << endl;
}int main() {readCSV("yao.csv");solve();solve_1();return 0;
}

这里只是在之前的基础上加了一个函数solve1

void solve_1() {std::sort(v.begin(), v.end(), [&](const std::tuple<int, int, int>& x, const std::tuple<int, int, int>& y) {if (std::get<0>(x) == std::get<0>(y)) { // 如果第一个元素相同return std::get<1>(x) < std::get<1>(y); // 按第二个元素排序}return std::get<0>(x) < std::get<0>(y); // 按第一个元素排序});int cnt = 1;int start = 0;  int end = 0;vector<pair<int, int>> ans;vector<int> yao;while (cnt <= 1919) {auto& t = v[start];double x = get<1>(t);cnt++;bool flage = false;for (int i = start; i < v.size(); i++) {auto& t1 = v[i];double x1 = std::get<0>(t1);if (x1 > x) {end = i;flage = true;break;}double x4 = get<2>(t1);yao.push_back(x4);}if (flage == true) {auto& t2 = v[start];double x2 = std::get<1>(t2);cout << x2 << " " << "下面为该药柜的存储的药的编号:" << endl;ans.push_back(make_pair(x2, x));for (int i = 0; i < yao.size(); i++) {cout << yao[i] << " ";}yao.clear();cout << endl;cout << endl;}else if (flage == false) {auto& t3 = v[v.size()-1];double x3 = std::get<1>(t3);cout << x3 << " " << "下面为该药柜的存储的药的编号:" << endl;ans.push_back(make_pair(x3, x));for (int i = 0; i < yao.size(); i++) {cout << yao[i] << " ";}yao.clear();cout << endl;cout << endl;break;}start = end + 1;}cout << ans.size() << endl;
}

首先我们有一个falge是用来进行这个十分要选择58这个药柜的
为了要输出药品,我们可以用一个vector装,然后药盒的编号我们可以用一个vector
每当输出一个药柜的药盒编号的时候,都要进行清空这个vector,这样才可以装下一个药柜的

47
20 下面为该药柜的存储的药的编号:
774 1471 1352 1908 1482 669 1083 1785 909 405 332 668 471 254 1032 253 255 1465 107 975 612 1336 476 1133 61 1082 1071 1070 1051 603 274 1297 527 881 923 1179 348 1367 1486 1097 84 197 122 87 1490 1535 398 456 1751 1079 4 252 1594 1565 1370 505 520 1080 1081 1300 303 723 1591 875 1177 99 872 372 1092 702 1519 699 1827 1815 120 834 687 1423 686 318 1807 828 1547 128 1100 962 1200 1464 151 1540 412 1792 620 609 1791 1466 1307 184 1321 1335 572 1455 571 570 1449 1635 775 557 1917 1887 1153 1169 934 928 1016 1022 80 1612 539 731 1030 1604 1603 855 853 1627 851 298 927 230 18 1553 1188 1618 309 310 117 312 922 835 833 317 34 821 1171 806 1797 1441 472 1212 333 334 335 1680 1132 62 1023 784 1296 67 780 697 953 241 1470 112 1172 354 1173 857 725 111 1369 360 91 396 1439 1176 97 718 392 1258 1592 1298 1185 891 434 954 890 1652 1204 269 1069 1710 576 525 1195 521 871 1272 1278 515 717 866 685 1072 862 1018 1698 1364 384 1894 1629 123 1918 1004 950 1566 518 840 424 308 25 1424 801 1537 794 1536 1135 773 1152 743 1111 734 1754 724 361 93 1256 406 185 596 1322 1459 1333 196 684 199 1279 700 1343 1353 1076 696 1291 619 1012 921 1053 168 1292 461 1085 177 1293 1209 1290 512 936 371 1402 880 971 879 1302 1717 278 141 1480 641 902 870 990 899 1049 287 1830 145 911 513 1065 260 262 263 264 1868 265 272 130 279 280 133 299 302 313 319 1538 368 140 1511 1476 1460 453 454 1433 1432 1416 240 1412 485 1409 490 1702 1380 546 555 577 1318 48 50 601 606 169 1277 57 1227 673 1781 1198 679 680 1187 1175 1771 70 733 1170 1168 758 769 1142 779 792 797 798 826 832 1087 362 1750 198 848 869 1644 877 1643 1060 1052 998 209 1891 1631 1628 1620 233 236 1737 1610 116 160036 下面为该药柜的存储的药的编号:
517 693 366 526 420 694 695 910 1149 449 1099 692 691 425 1214 912 1510 1463 1837 1836 1131 665 1661 21 647 1383 24 426 507 707 1509 1909 1648 38 203 40 770 42 704 210 766 999 761 1019 1151 530 347 1530 753 268 967 75 1059 1062 275 543 1417 878 351 624 277 288 1391 1571 861 1280 1074 292 737 1355 852 1123 831 125 390 823 131 593 1491 735 569 633 357 363 595 1397 1125 1720 1458 1590 617 1104 1867 1116 1707 1118 1217 1699 1119 1122 165 436 1260 1512 439 440 1241 977 496 126 542 1759 1760 1067 2 838 1554 6 8 9 1865 1864 1088 1833 473 304 1828 23 26 27 846 31 32 1556 516 1805 849 1803 1802 987 1800 1573 285 52 283 1783 1574 1782 1425 1584 270 886 68 71 1770 1379 1055 1768 1426 78 79 1602 1758 1036 1749 1033 1608 244 913 1029 1741 103 1027 121 1739 108 1738 1614 113 115 118 1020 1617 1736 228 1731 135 136 1624 226 1729 1725 225 1009 147 1719 1718 1626 1712 1711 221 1703 1701 163 1002 1001 1428 942 943 217 1872 1883 1884 1885 216 1890 1378 1665 1664 186 215 1656 1653 1651 214 1630 1650 1632 205 1637 1636 523 1430 464 1377 1376 1374 1372 1437 538 1444 1406 548 552 1405 1361 1360 1357 1450 1451 1342 1452 1453 1456 1337 1457 1332 1331 1461 1320 1404 1315 1314 1309 428 1415 1401 607 1472 1473 413 1281 1477 494 631 1263 637 638 1262 402 401 1257 1483 1254 650 1400 1226 1225 662 394 1103 674 1507 683 1394 698 712 713 714 1199 1524 969 1525 742 745 1389 1156 1418 765 771 1146 345 344 342 340 786 787 788 790 791 1384 336 1126 1120 325 815 816 324 1546 1095 320 1550 544 105 3 5 1835 1244 1046 1474 33 1048 1804 951 51 498 58 63 1108 1775 1484 1186 1769 77 502 88 894 1745 1744 1593 976 104 110 1393 124 1735 137 1730 1723 1721 1714 1527 164 166 1567 537 1061 1685 1684 1682 540 1064 1673 1411 370 1354 192 1295 195 610 1220 1222 541 1338 605 364 710 1385 549 369 1522 827 380 338 1580 670 1259 1515 1520 1521 682 1184 367 1094 1264 551 1304 1232 863 1075 564 475 290 327 305 839 856 1117 582 952 1359 293 632 1174 905 247 1031 1478 1526 459 1611 1371 625 1282 237 1615 1623 661 1015 752 219 415 939 524 1513 416 757 991 1399 1879 1475 30 337 1050 1066 876 730 1601 1831 1789 1780 1697 179 1666 1660 1228 1138 778 353 352 781 917 1136 1021 652 377 795 796 1462 1159 1010 414 1316 705 1181 1178 829 314 1090 1330 715 1413 681 616 722 1886 1363 1889 864 358 1896 762 98 94 1765 1551 1649 66 1795 35 19 248 1561 1562 1542 580 1109 706 583 1569 768 506 1446 1548 1445 386 1191 1467 1497 510 793 664 528 284 550 1164 1583 1421 675 379 1157 1006 1533 1365 1347 754 727 653 1532 728 193 618 1876 1877 1674 1681 1492 1686 408 1440 764 1694 1708 949 767 1161 802 73 1325 1539 271 729 1207 1240 1247 1344 1386 1448 1523 1558 1575 1625 721 1748 1763 1764 44 1875 100 101 119 1880 222 250 326 378 407 478 716 726 751 813 1 1047 1155 1180 1589 554 1587 1747 1829 1068 809 1488 1431 1609 1798 1552 1756 218 56 689 1392 756 213 1801 708 356 483 178 741 1662 1755 1598 1659 1658 281 635 1657 1008 1570 1495 1679 738 194 1581 1646 574 1582 1210 1588 1024 1572 286 663 1216 1633 626 1746 1919 1505 460 1487 1479 1037 1341 1870 978 503 1390 946 1820 1819 1387 381 1813 1812 1810 522 1246 331 531 1740 1261 1324 1534 1716 533 343 534 535 536 837 106 532 239 1761 1669 175 1654 782 55 339 1368 7 748 993 451 289 1796 868 267 1726 1014 134 1025 1500 1501 592 1528 1035 654 1162 1545 1381 1667 146 114 1516 1544 486 667 804 1641 1489 1435 883 1356 887 627 1577 249 1308 1671 1481 393 1447 311 427 1268 282 1874 1878 1189 1892 992 1388 493 1242 811 1243 810 1576 1375 1790 844 1270 1774 301 1655 69 76 1766 1366 1269 565 1668 246 144 1139 1140 776 329 251 1245 590 1163 1688 1267 740 597 1443 1436 1434 469 1493 315 435 926 1410 1871 489 1396 980 1038 961 1663 1893 1817 1231 174 986 488 349 994 1407 466 1806 373 1811 1773 777 59 1414 1454 1148 37 1498 1358 1288 732 575 1427 448 1503 1239 28 102 1289 1496 1313 874 374 1706 850 1373 1794 504 1595 29 322 644 410 409 387 1276 812 96 558 385 594 1776 656 1235 1248 1193 1271 1283 621 291 604 1563 1555 1312 579 567 1345 563 562 561 560 559 970 545 1382 382 1506 481 480 1005 929 924 1442 22 36 1073 1779 81 1753 1752 1689 127 1124 1732 1856 1858 1859 1861 1863 1866 783 1143 1147 1154 1705 1704 746 1676 1675 1888 677 676 960 1619 1898 1900 1901 1903 1904 651 1916 919 227 82 297 1098 495 882 984 359 1578 1213 391 1607 446 963 234 1504 1340 463 1301 931 1255 365 1734 1252 1253 1221 1485 1514 1913 841 892 1531 1112 1621 1670 1622 803 659 1202 997 295 74 587 1129 474 259 586 1028 1845 1862 1860 1855 1854 1286 1287 1869 720 1899 1541 468 1215 1130 657 328 996 1224 1223 1150 10 13 12 15 14 16 11 1842 1793 1041 1841 1334 1840 1846 258 256 1882 1853 1208 17 1847 925 1349 1852 1727 1284 1422 1848 1045 1044 1285 257 1043 1849 261 1850 1042 1897 1040 1691 1692 1693 1039 1851 1844 1843 188 1326 566 938 39 760 906 497 1915 1468 1814 739 1089 888 176 1013 158549 下面为该药柜的存储的药的编号:
149 157 160 60 482 1499 447 873 983 988 666 845 1205 1003 85 323 1106 630 1011 581 156 171 1788 1910 701 1549 982 212 1517 1398 1557 139 1518 578 867 622 1824 1266 1672 403 1529 591 915 1722 1826 1350 1420 1825 1818 818 981 1429 1121 629 1348 1821 1236 1822 957 1823 1816 958 1905 1906 1907 1273 1294 1323 296 95 1911 207 86 242 671 423 180 1182 1158 64 642 1183 500 1564 584 1306 1784 896 1403 885 462 658 678 421 598 568 383 89 916 1647 1102 611 1201 20 1096 817 1834 1128 41 989 300 660 672 819 979 907 1303 172 893 397 273 158 72 904 1762 688 1677 90 585 341 1056 1166 1696 589 167 162 613 860 159 429 430 1230 1857 1007 276 330 859 1728 148 964 470 452 245 1190 1351 224 1786 1713 750 200 1346 1113 1733 1586 588 465 1494 46 1839 1767 202 614 1058 941 65 985 1196 824 854 966 820 747 858 129 152 600 719 1105 316 930 1700 1034 1743 1395 189 1339 1000 1683 389 206 1203 749 53 1502 1873 458 847 608 1084 1709 1881 1362 204 553 191 400 455 419 433 933 615 1838 1275 932 646 898 897 484 487 649 155 785 1077 1724 842 181 965 1274 822 321 1599 1115 457 432 1054 1640 755 431 170 307 161 1605 1317 1543 836 645 1107 634 150 825 1144 628 1438 1912 208 1787 1560 1559 1715 805 1114 92 865 1057 399 935 417 573 956 640 1597 1237 235 1229 229 220 211 201 703 1167 759 154 492 529 1137 142 501 995 789 800 375 442 83 1127 376 937 1690 1251 138 1250 1249 948 1194 1078 1799 1808 1197 599 655 45 648 238 499 1895 814 173 1678 1695 1329 514 772 418 1086 438 799 1742 437 945 1319 1778 900 1310 491 889 109 266 944 903 395 183 1165 709 1616 355 153 350 519 294 231 602 1568 346 901 49 636 808 1219 1613 243 843 450 1579 190 47 1469 168789 下面为该药柜的存储的药的编号:
1206 830 690 232 918 736 404 1141 974 477 1299 54 1305 1091 479 547 508 1327 187 908 914 1017 807 763 306 422 411 143 1328 467 1233 1101 1645 1634 1914 223 1063 1596 955 1772 1234 920 1757 1508 1809 1902 43 1093 1145 1311 182 511 973 1777 643 884 1265 623 895 1192 1638 388 1606 1218 639 940 1408 1419 972 1110 711 1160 1639 1026 744 1642 1211 443 1238 556 509 947 1134 441 445 444 18324

6 总结

首先我们理解了这个侧翻,重叠,水平旋转

然后把这个带入到编程种进行求解

然后就是条件约束的求解,我们可以利用判决式来和约束条件捆绑求解,约束条件我们可以一个式子用两种作用,一个是约束的,一个是放开的,这个很重要

然后就是贪心算法的求解了,有点像动态dp

相关文章:

  • MOT challenge使用方法及数据集说明
  • 我的3种AI写作节奏搭配模型,适合不同类型写作者
  • 【js逆向】某某省过验证码逆向
  • 从印巴空战看数据制胜密码:元数据如何赋能数字战场
  • N2语法 状態
  • for(auto a:b)和for(auto a:b)的区别
  • leetcode动态规划—完全背包系列
  • 一篇文章玩转CAP原理
  • 鸿蒙OSUniApp滑动锁屏实战:打造流畅优雅的移动端解锁体验#三方框架 #Uniapp
  • 无线通信模块简介
  • Vue2 与 Vue3对比
  • Python字典键的使用与应用:从基础到高级实践
  • AWS WAF设置IP白名单
  • Python Day38
  • QT-Creator安装教程(windows)
  • 2.2.2 06年T1
  • Python训练营---Day40
  • 【笔记】Windows 系统安装 Scoop 包管理工具
  • 在线制作幼教早教行业自适应网站教程
  • E. Melody 【CF1026 (Div. 2)】 (求欧拉路径之Hierholzer算法)
  • 做pop网站/网络营销网站设计
  • 怎样做内网网站/seo整站优化费用
  • 电商平台正在建设中网站页面提示/免费发外链
  • 贵州省政府门户网站建设/武汉最新消息今天
  • 室内设计公司排名及案例/滕州网站建设优化
  • 网吧网站怎么做的/百度资源提交