'commit'
This commit is contained in:
7
C++专题课程/背包九讲/TestProject/.idea/encodings.xml
generated
Normal file
7
C++专题课程/背包九讲/TestProject/.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
|
||||
<file url="file://$PROJECT_DIR$/5_TwoDimensionPackage.cpp" charset="GBK" />
|
||||
<file url="PROJECT" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
7
C++专题课程/背包九讲/TestProject/.idea/misc.xml
generated
Normal file
7
C++专题课程/背包九讲/TestProject/.idea/misc.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="ES6" />
|
||||
</component>
|
||||
</project>
|
||||
8
C++专题课程/背包九讲/TestProject/.idea/modules.xml
generated
Normal file
8
C++专题课程/背包九讲/TestProject/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/TestProject.iml" filepath="$PROJECT_DIR$/.idea/TestProject.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
131
C++专题课程/背包九讲/TestProject/.idea/workspace.xml
generated
Normal file
131
C++专题课程/背包九讲/TestProject/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true">
|
||||
<generated>
|
||||
<config projectName="TestProject" targetName="5_TwoDimensionPackage" />
|
||||
<config projectName="TestProject" targetName="7_DependOnPackage" />
|
||||
<config projectName="TestProject" targetName="4_mixPackage" />
|
||||
<config projectName="TestProject" targetName="9_ChangePackage" />
|
||||
<config projectName="TestProject" targetName="2_wholePackage" />
|
||||
<config projectName="TestProject" targetName="6_GroupPackage" />
|
||||
<config projectName="TestProject" targetName="3_multiplexPackage" />
|
||||
<config projectName="TestProject" targetName="8_GeneralizationPackage" />
|
||||
<config projectName="TestProject" targetName="TestProject" />
|
||||
</generated>
|
||||
</component>
|
||||
<component name="CMakeSettings">
|
||||
<configurations>
|
||||
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
|
||||
</configurations>
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="63c66478-eff6-4bf9-8743-abf43e8c6be2" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="ClangdSettings">
|
||||
<option name="formatViaClangd" value="false" />
|
||||
</component>
|
||||
<component name="ExecutionTargetManager" SELECTED_TARGET="CMakeBuildProfile:Debug" />
|
||||
<component name="ProjectId" id="1StyUZnl7gWE0W4kpj2Za2Kni9F" />
|
||||
<component name="PropertiesComponent">
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="settings.editor.selected.configurable" value="CPPToolchains" />
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="CMake Application.9_ChangePackage">
|
||||
<configuration name="2_wholePackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="2_wholePackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="2_wholePackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="3_multiplexPackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="3_multiplexPackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="3_multiplexPackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="4_mixPackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="4_mixPackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="4_mixPackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="5_TwoDimensionPackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="5_TwoDimensionPackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="5_TwoDimensionPackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="6_GroupPackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="6_GroupPackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="6_GroupPackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="7_DependOnPackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="7_DependOnPackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="7_DependOnPackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="8_GeneralizationPackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="8_GeneralizationPackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="8_GeneralizationPackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="9_ChangePackage" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="9_ChangePackage" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="9_ChangePackage">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="TestProject" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TestProject" TARGET_NAME="TestProject" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="TestProject" RUN_TARGET_NAME="TestProject">
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<list>
|
||||
<item itemvalue="CMake Application.2_wholePackage" />
|
||||
<item itemvalue="CMake Application.3_multiplexPackage" />
|
||||
<item itemvalue="CMake Application.4_mixPackage" />
|
||||
<item itemvalue="CMake Application.5_TwoDimensionPackage" />
|
||||
<item itemvalue="CMake Application.6_GroupPackage" />
|
||||
<item itemvalue="CMake Application.7_DependOnPackage" />
|
||||
<item itemvalue="CMake Application.8_GeneralizationPackage" />
|
||||
<item itemvalue="CMake Application.9_ChangePackage" />
|
||||
<item itemvalue="CMake Application.TestProject" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="63c66478-eff6-4bf9-8743-abf43e8c6be2" name="Default Changelist" comment="" />
|
||||
<created>1572397203224</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1572397203224</updated>
|
||||
<workItem from="1572397208038" duration="34000" />
|
||||
<workItem from="1572397327869" duration="68000" />
|
||||
<workItem from="1572397418723" duration="462000" />
|
||||
<workItem from="1572404324657" duration="19341000" />
|
||||
<workItem from="1572596471562" duration="87000" />
|
||||
<workItem from="1572596592960" duration="3572000" />
|
||||
<workItem from="1573175496523" duration="4000000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
</project>
|
||||
13
C++专题课程/背包九讲/TestProject/1.txt
Normal file
13
C++专题课程/背包九讲/TestProject/1.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
2
|
||||
4 10
|
||||
2 4
|
||||
3 5
|
||||
4 6
|
||||
5 10
|
||||
|
||||
5 20
|
||||
3 2
|
||||
7 3
|
||||
10 5
|
||||
15 6
|
||||
16 10
|
||||
50
C++专题课程/背包九讲/TestProject/1_01Package.cpp
Normal file
50
C++专题课程/背包九讲/TestProject/1_01Package.cpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
#define maxV 1000
|
||||
/*
|
||||
1. 01背包
|
||||
1)题目:
|
||||
有n件物品和一个容量为v的背包。
|
||||
第i件物品的费用是c[i],价值是w[i]。
|
||||
求解将哪些物品装入背包可使价值总和最大
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包大小
|
||||
n个物品的ci和wi
|
||||
* */
|
||||
int main(void) {
|
||||
int times, n, v, ci, wi;
|
||||
int f[maxV];
|
||||
//读取数据文件
|
||||
freopen("../1.txt", "r", stdin);
|
||||
|
||||
//读入次数
|
||||
cin >> times; //本示例是2次
|
||||
|
||||
//开始两次循环
|
||||
while (times--) {
|
||||
//初始值
|
||||
memset(f, 0, sizeof(f));
|
||||
//读取物品个数与背包体积
|
||||
cin >> n >> v;
|
||||
//对每个物品进行读取判断
|
||||
for (int i = 0; i < n; i++) {
|
||||
//第i件物品的费用(此例出指体积)是c[i],价值是w[i]。
|
||||
cin >> ci >> wi;
|
||||
//利用01背包模板进行填充f数组,动态规划
|
||||
for (int j = v; j >= 0; j--) { //从大到小
|
||||
if (j >= ci)
|
||||
f[j] = max(f[j - ci] + wi, f[j]);
|
||||
}
|
||||
}
|
||||
//输出动态规划的数组
|
||||
for (int i = 0; i <= v; i++) {
|
||||
cout << f[i] << " ";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
//最后的结果
|
||||
cout << f[v] << endl;
|
||||
}
|
||||
}
|
||||
13
C++专题课程/背包九讲/TestProject/2.txt
Normal file
13
C++专题课程/背包九讲/TestProject/2.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
2
|
||||
4 10
|
||||
2 4
|
||||
3 5
|
||||
4 6
|
||||
5 10
|
||||
|
||||
5 20
|
||||
3 2
|
||||
7 3
|
||||
10 5
|
||||
15 6
|
||||
16 10
|
||||
33
C++专题课程/背包九讲/TestProject/2_wholePackage.cpp
Normal file
33
C++专题课程/背包九讲/TestProject/2_wholePackage.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
#define maxV 1000
|
||||
/**
|
||||
* 2. 完全背包
|
||||
1)题目:
|
||||
有n件物品和一个容量为v的背包,每种物品都有无限件可用。
|
||||
第i种物品的费用是c[i],价值是w[i]。
|
||||
求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包容量
|
||||
n个物品的ci和vi
|
||||
*/
|
||||
int main(void) {
|
||||
int cases, n, v, ci, wi;
|
||||
int f[maxV];
|
||||
freopen("../2.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v;
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ci >> wi;
|
||||
for (int j = 0; j <= v; j++) {
|
||||
if (j >= ci)
|
||||
f[j] = max(f[j], f[j - ci] + wi);
|
||||
}
|
||||
}
|
||||
cout << f[v] << endl;
|
||||
}
|
||||
}
|
||||
11
C++专题课程/背包九讲/TestProject/3.txt
Normal file
11
C++专题课程/背包九讲/TestProject/3.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
2
|
||||
3 10
|
||||
1 1 10
|
||||
2 2 4
|
||||
3 3 11
|
||||
|
||||
4 20
|
||||
5 2 5
|
||||
2 3 6
|
||||
3 4 8
|
||||
1 6 19
|
||||
58
C++专题课程/背包九讲/TestProject/3_multiplexPackage.cpp
Normal file
58
C++专题课程/背包九讲/TestProject/3_multiplexPackage.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
#define maxV 1000
|
||||
int f[maxV], v;
|
||||
/*
|
||||
3. 多重背包
|
||||
1)题目:
|
||||
有n种物品和一个容量为v的背包。
|
||||
第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。
|
||||
求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包容量
|
||||
n个物品的ni ci wi
|
||||
* */
|
||||
void ZeroOnePack(int ci, int wi) {
|
||||
for (int j = v; j >= 0; j--)
|
||||
if (j >= ci)
|
||||
f[j] = max(f[j], f[j - ci] + wi);
|
||||
}
|
||||
|
||||
void CompletePack(int ci, int wi) {
|
||||
for (int j = 0; j <= v; j++)
|
||||
if (j >= ci)
|
||||
f[j] = max(f[j], f[j - ci] + wi);
|
||||
}
|
||||
|
||||
void MultiplePack(int ni, int ci, int wi) {
|
||||
if (ni * ci >= v) {
|
||||
CompletePack(ci, wi);
|
||||
return;
|
||||
}
|
||||
int k = 1, amount = ni;
|
||||
while (k < ni) {
|
||||
ZeroOnePack(ci * k, wi * k);
|
||||
amount -= k;
|
||||
k *= 2;
|
||||
}
|
||||
ZeroOnePack(ci * amount, wi * amount);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
int cases, n, ni, ci, wi;
|
||||
freopen("../3.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v;
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ni >> ci >> wi;
|
||||
MultiplePack(ni, ci, wi);
|
||||
}
|
||||
//for (int i = 0; i <= v; i++) cout << f[i] << " "; cout << endl;
|
||||
cout << f[v] << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
11
C++专题课程/背包九讲/TestProject/4.txt
Normal file
11
C++专题课程/背包九讲/TestProject/4.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
2
|
||||
3 10
|
||||
-1 1 2
|
||||
2 2 5
|
||||
1 3 7
|
||||
|
||||
4 20
|
||||
3 2 5
|
||||
4 4 6
|
||||
-1 6 8
|
||||
1 7 10
|
||||
61
C++专题课程/背包九讲/TestProject/4_mixPackage.cpp
Normal file
61
C++专题课程/背包九讲/TestProject/4_mixPackage.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/**
|
||||
* 4. 混合三种背包
|
||||
1)问题:
|
||||
有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。
|
||||
应该怎么求解呢?
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包容量
|
||||
第i种物品的ni(无限次的标为-1) ci wi
|
||||
*/
|
||||
#define maxV 1000
|
||||
|
||||
int f[maxV], v;
|
||||
|
||||
void ZeroOnePack(int ci, int wi) {
|
||||
for (int j = v; j >= 0; j--)
|
||||
if (j >= ci)
|
||||
f[j] = max(f[j], f[j - ci] + wi);
|
||||
}
|
||||
|
||||
void CompletePack(int ci, int wi) {
|
||||
for (int j = 0; j <= v; j++)
|
||||
if (j >= ci)
|
||||
f[j] = max(f[j], f[j - ci] + wi);
|
||||
}
|
||||
|
||||
void MultiplePack(int ni, int ci, int wi) {
|
||||
if (ni * ci >= v) {
|
||||
CompletePack(ci, wi);
|
||||
return;
|
||||
}
|
||||
int k = 1, amount = ni;
|
||||
while (k < ni) {
|
||||
ZeroOnePack(ci * k, wi * k);
|
||||
amount -= k;
|
||||
k *= 2;
|
||||
}
|
||||
ZeroOnePack(ci * amount, wi * amount);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
int cases, n, ni, ci, wi;
|
||||
freopen("../4.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v;
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ni >> ci >> wi;
|
||||
if (ni == 1) ZeroOnePack(ci, wi);
|
||||
else if (ni == -1) CompletePack(ci, wi);
|
||||
else MultiplePack(ni, ci, wi);
|
||||
}
|
||||
//for (int i = 0; i <= v; i++) cout << f[i] << " "; cout << endl;
|
||||
cout << f[v] << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
11
C++专题课程/背包九讲/TestProject/5.txt
Normal file
11
C++专题课程/背包九讲/TestProject/5.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
2
|
||||
3 10 5
|
||||
1 2 4
|
||||
2 1 4
|
||||
4 4 6
|
||||
|
||||
4 5 6
|
||||
1 1 3
|
||||
1 2 4
|
||||
2 1 4
|
||||
3 4 7
|
||||
44
C++专题课程/背包九讲/TestProject/5_TwoDimensionPackage.cpp
Normal file
44
C++专题课程/背包九讲/TestProject/5_TwoDimensionPackage.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/**
|
||||
* 5. <20><>ά<EFBFBD><CEAC><EFBFBD>õı<C3B5><C4B1><EFBFBD>
|
||||
1<><31><EFBFBD><EFBFBD><EFBFBD>⣺
|
||||
<20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>ͬ<EFBFBD>ķ<EFBFBD><C4B7>ã<EFBFBD>
|
||||
ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ۣ<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>ÿ<EFBFBD>ִ<EFBFBD><D6B4>۶<EFBFBD><DBB6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>Եõ<D4B5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
<20><>i<EFBFBD><69><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>۷ֱ<DBB7>Ϊa[i]<5D><>b[i]<5D><>
|
||||
<20><><EFBFBD>ִ<EFBFBD><D6B4>ۿɸ<DBBF><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ΪV<CEAA><56>U<EFBFBD><55><EFBFBD><EFBFBD>Ʒ<EFBFBD>ļ<EFBFBD>ֵΪw[i]<5D><>
|
||||
2<><32><EFBFBD><EFBFBD><EFBFBD>룺
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><>Ʒ<EFBFBD><C6B7> <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u
|
||||
<20><>i<EFBFBD><69><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ai bi wi
|
||||
*/
|
||||
#define maxV 1000
|
||||
#define maxU 1000
|
||||
|
||||
int main(void) {
|
||||
int cases, n, v, u, ai, bi, wi;
|
||||
int f[maxV][maxU];
|
||||
freopen("../5.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v >> u;
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ai >> bi >> wi;
|
||||
for (int j = v; j >= 0; j--) {
|
||||
for (int k = u; k >= 0; k--) {
|
||||
if (ai <= j && bi <= k)
|
||||
f[j][k] = max(f[j][k], f[j - ai][k - bi] + wi);
|
||||
}
|
||||
}
|
||||
}
|
||||
// for (int i = 0; i <= v; i++)
|
||||
// for(int j=0;j<=u;j++)
|
||||
// cout << f[i][j] << " ";
|
||||
// cout << endl;
|
||||
cout << f[v][u] << endl;
|
||||
}
|
||||
}
|
||||
13
C++专题课程/背包九讲/TestProject/6.txt
Normal file
13
C++专题课程/背包九讲/TestProject/6.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
2
|
||||
4 10 2
|
||||
3 5 0
|
||||
4 6 0
|
||||
2 7 1
|
||||
1 6 1
|
||||
|
||||
5 10 3
|
||||
1 3 0
|
||||
2 4 0
|
||||
3 5 1
|
||||
4 7 1
|
||||
5 8 2
|
||||
46
C++专题课程/背包九讲/TestProject/6_GroupPackage.cpp
Normal file
46
C++专题课程/背包九讲/TestProject/6_GroupPackage.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/**
|
||||
6. 分组背包
|
||||
1)问题:
|
||||
有n件物品和一个容量为v的背包。
|
||||
第i件物品的费用是c[i],价值是w[i]。
|
||||
这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。
|
||||
求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包容量 组数g(组号范围:0 ~ g-1)
|
||||
第i件物品的ci wi gi(所属组号)
|
||||
*/
|
||||
using namespace std;
|
||||
#define maxV 1000
|
||||
#define maxG 100
|
||||
#define maxN 100
|
||||
|
||||
int main(void) {
|
||||
int cases, n, v, g, gi;
|
||||
int f[maxV];
|
||||
int ci[maxN], wi[maxN];
|
||||
freopen("../6.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v >> g;
|
||||
vector<vector<int> > gMap(g);
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ci[i] >> wi[i] >> gi;
|
||||
gMap[gi].push_back(i);
|
||||
}
|
||||
|
||||
for (int i = 0; i < g; i++) {
|
||||
for (int j = v; j >= 0; j--) {
|
||||
for (int k = 0; k < gMap[i].size(); k++) {
|
||||
if (j >= ci[gMap[i][k]])
|
||||
f[j] = max(f[j], f[j - ci[gMap[i][k]]] + wi[gMap[i][k]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
cout << f[v] << endl;
|
||||
}
|
||||
}
|
||||
11
C++专题课程/背包九讲/TestProject/7.txt
Normal file
11
C++专题课程/背包九讲/TestProject/7.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
2
|
||||
3 10
|
||||
3 5 -1
|
||||
4 6 0
|
||||
7 10 0
|
||||
|
||||
4 15
|
||||
4 1 -1
|
||||
6 8 0
|
||||
7 10 0
|
||||
10 4 -1
|
||||
84
C++专题课程/背包九讲/TestProject/7_DependOnPackage.cpp
Normal file
84
C++专题课程/背包九讲/TestProject/7_DependOnPackage.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/**
|
||||
7. 有依赖的背包
|
||||
1)题目:
|
||||
这种背包问题的物品间存在某种“依赖”的关系。
|
||||
也就是说,i依赖于j,表示若选物品i,则必须选物品j。
|
||||
为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖;
|
||||
另外,没有某件物品同时依赖多件物品。
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包大小
|
||||
第i个物品的ci wi di(依赖物品的编号,-1为不依赖其他物品)
|
||||
*/
|
||||
#define maxV 1000
|
||||
#define maxG 100
|
||||
|
||||
int main(void) {
|
||||
int cases, n, v, ci[maxV], wi[maxV], di, f[maxV];
|
||||
freopen("../7.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v;
|
||||
|
||||
// group[i]空表示i号物品有依赖,因此存放到其他组里
|
||||
// 只有一个元素表示i号物品既无依赖也不被依赖
|
||||
// 有多个元素表示i号物品被依赖,这里自己的编号i也被存放进group[i]
|
||||
vector<vector<int> > groups(n);
|
||||
|
||||
// 读入数据并储存起来
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ci[i] >> wi[i] >> di;
|
||||
if (di == -1) groups[i].push_back(i);
|
||||
else groups[di].push_back(i);
|
||||
}
|
||||
|
||||
// 对每个有多个元素的组进行01背包
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (groups[i].size() > 1) {
|
||||
vector<int> giOri; //group[i]的拷贝,排除i本身
|
||||
int newV = v - ci[i];
|
||||
|
||||
// 复制group[i]中的元素,排除i
|
||||
for (int j = 0; j < groups[i].size(); j++) {
|
||||
if (groups[i][j] != i)
|
||||
giOri.push_back(groups[i][j]);
|
||||
}
|
||||
|
||||
// 把等效物品组存入group[i]中
|
||||
groups[i].clear();
|
||||
groups[i].resize(newV + 1, 0);
|
||||
for (int j = 0; j < giOri.size(); j++) {
|
||||
for (int k = newV; k >= 0; k--) {
|
||||
if (ci[giOri[j]] <= k) {
|
||||
groups[i][k] = max(groups[i][k], groups[i][k - ci[giOri[j]]] + wi[giOri[j]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 进行分组背包
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (groups[i].size() == 0) continue;
|
||||
else if (groups[i].size() == 1) { // i物品无依赖且不被依赖
|
||||
for (int j = v; j >= 0; j--) {
|
||||
if (j >= ci[i])
|
||||
f[j] = max(f[j], f[j - ci[i]] + wi[i]);
|
||||
}
|
||||
} else { // i物品被依赖, i组第k个物品的cost为k + ci[i], weight为group[i][k] + wi[i]
|
||||
for (int j = v; j >= 0; j--) {
|
||||
for (int k = 0; k < groups[i].size(); k++) {
|
||||
if (j >= k + ci[i])
|
||||
f[j] = max(f[j], f[j - k - ci[i]] + groups[i][k] + wi[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << f[v] << endl;
|
||||
}
|
||||
}
|
||||
15
C++专题课程/背包九讲/TestProject/8.txt
Normal file
15
C++专题课程/背包九讲/TestProject/8.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
2
|
||||
5 5 0
|
||||
1 2 -1
|
||||
2 7 0
|
||||
2 5 0
|
||||
2 6 2
|
||||
1 4 2
|
||||
|
||||
6 5 0
|
||||
1 2 -1
|
||||
1 3 0
|
||||
2 3 0
|
||||
2 4 0
|
||||
2 7 2
|
||||
3 10 2
|
||||
66
C++专题课程/背包九讲/TestProject/8_GeneralizationPackage.cpp
Normal file
66
C++专题课程/背包九讲/TestProject/8_GeneralizationPackage.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/**
|
||||
8. 泛化物品
|
||||
)题目:
|
||||
在背包容量为v的背包问题中,泛化物品是一个定义域为0..v中的整数的函数h,当分配给它的费用为v时,能得到的价值就是h(v)。
|
||||
为了应用泛化物品思想,这里假设题目为:存在依赖关系树(简单起见,只有一个根节点),即有依赖的物品也可以被依赖,可结合原文7.3节来理解此句。
|
||||
2)输入:
|
||||
测试用例数
|
||||
物品数 背包容量 根节点编号
|
||||
第i个物品的ci wi di(依赖物品的编号,-1为不依赖其他物品)
|
||||
* @return
|
||||
*/
|
||||
#define maxN 100
|
||||
#define maxV 1000
|
||||
|
||||
int n, v;
|
||||
int cnt = 0;
|
||||
int head[maxN];
|
||||
int wi[maxN], ci[maxN];
|
||||
int f[maxN][maxV];
|
||||
|
||||
struct Edge {
|
||||
int v, next;
|
||||
} e[maxN - 1];
|
||||
|
||||
void addEdge(int u, int v) {
|
||||
e[cnt].v = v;
|
||||
e[cnt].next = head[u];
|
||||
head[u] = cnt++;
|
||||
}
|
||||
|
||||
void treeDP(int u) {
|
||||
for (int i = ci[u]; i <= v; i++) {
|
||||
f[u][i] = wi[u];
|
||||
}
|
||||
for (int i = head[u]; i != -1; i = e[i].next) {
|
||||
int curr = e[i].v;
|
||||
treeDP(curr);
|
||||
for (int j = v; j >= 0; j--) {
|
||||
for (int k = j - ci[u]; k >= 0; k--) {
|
||||
f[u][j] = max(f[u][j], f[u][j - k] + f[curr][k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
int cases, root;
|
||||
freopen("../8.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
cnt = 0;
|
||||
memset(head, -1, sizeof(head));
|
||||
memset(f, 0, sizeof(f));
|
||||
cin >> n >> v >> root;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int di;
|
||||
cin >> ci[i] >> wi[i] >> di;
|
||||
addEdge(di, i);
|
||||
}
|
||||
treeDP(root);
|
||||
cout << f[root][v] << endl;
|
||||
}
|
||||
}
|
||||
13
C++专题课程/背包九讲/TestProject/9.txt
Normal file
13
C++专题课程/背包九讲/TestProject/9.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
2
|
||||
4 10
|
||||
2 4
|
||||
3 5
|
||||
4 6
|
||||
5 10
|
||||
|
||||
5 20
|
||||
3 2
|
||||
7 3
|
||||
10 5
|
||||
15 6
|
||||
16 10
|
||||
50
C++专题课程/背包九讲/TestProject/9_ChangePackage.cpp
Normal file
50
C++专题课程/背包九讲/TestProject/9_ChangePackage.cpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/**
|
||||
*9. 背包问题的变化
|
||||
1)题目:
|
||||
输出01背包的具体方案
|
||||
2)输入:
|
||||
同01背包
|
||||
* @return
|
||||
*/
|
||||
#define maxV 1000
|
||||
#define maxN 100
|
||||
|
||||
int main(void) {
|
||||
int cases, n, v, ci[maxN], wi;
|
||||
int f[maxV];
|
||||
bool g[maxN][maxV]; //g[i][v]=0 表示没放i时的f(i, v)较大,
|
||||
//g[i][v]=1 表示放进i时的f(i, v)较大
|
||||
freopen("../9.txt", "r", stdin);
|
||||
cin >> cases;
|
||||
while (cases--) {
|
||||
memset(f, 0, sizeof(f));
|
||||
memset(g, 0, sizeof(g));
|
||||
cin >> n >> v;
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> ci[i] >> wi;
|
||||
for (int j = v; j >= 0; j--) {
|
||||
if (j >= ci[i]) {
|
||||
if (f[j - ci[i]] + wi > f[j]) {
|
||||
f[j] = f[j - ci[i]] + wi;
|
||||
g[i][j] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int i = n - 1, j = v;
|
||||
while (i >= 0) {
|
||||
if (g[i][j] == 1) {
|
||||
cout << "选了" << i << endl;
|
||||
j -= ci[i];
|
||||
} else {
|
||||
cout << "没选" << i << endl;
|
||||
}
|
||||
i--;
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
}
|
||||
20
C++专题课程/背包九讲/TestProject/CMakeLists.txt
Normal file
20
C++专题课程/背包九讲/TestProject/CMakeLists.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(TestProject)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX FLAGS -fexec-charset=GBK)
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
# 修改clion 内存
|
||||
MATH(EXPR stack_size "4*1024*1024")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,${stack_size}")
|
||||
|
||||
add_executable(TestProject 1_01Package.cpp)
|
||||
add_executable(2_wholePackage 2_wholePackage.cpp)
|
||||
add_executable(3_multiplexPackage 3_multiplexPackage.cpp)
|
||||
add_executable(4_mixPackage 4_mixPackage.cpp)
|
||||
add_executable(5_TwoDimensionPackage 5_TwoDimensionPackage.cpp)
|
||||
add_executable(6_GroupPackage 6_GroupPackage.cpp)
|
||||
add_executable(7_DependOnPackage 7_DependOnPackage.cpp)
|
||||
add_executable(8_GeneralizationPackage 8_GeneralizationPackage.cpp)
|
||||
add_executable(9_ChangePackage 9_ChangePackage.cpp)
|
||||
|
||||
1
C++专题课程/背包九讲/TestProject/背包九讲C++实现完整代码.txt
Normal file
1
C++专题课程/背包九讲/TestProject/背包九讲C++实现完整代码.txt
Normal file
@@ -0,0 +1 @@
|
||||
https://blog.csdn.net/desirepath/article/details/71679170
|
||||
BIN
C++专题课程/背包九讲/背包问题九讲.pdf
Normal file
BIN
C++专题课程/背包九讲/背包问题九讲.pdf
Normal file
Binary file not shown.
6
C++专题课程/背包九讲/阅读资料.txt
Normal file
6
C++专题课程/背包九讲/阅读资料.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD> c++ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
https://blog.csdn.net/desirepath/article/details/71679170
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD>
|
||||
https://www.cnblogs.com/BrokenString/p/9279544.html
|
||||
|
||||
Reference in New Issue
Block a user