'commit'
This commit is contained in:
213
TangDou/BeiBao/.clang-format
Normal file
213
TangDou/BeiBao/.clang-format
Normal file
@@ -0,0 +1,213 @@
|
||||
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
|
||||
Language: Cpp
|
||||
BasedOnStyle: LLVM
|
||||
|
||||
# 访问说明符(public、private等)的偏移
|
||||
AccessModifierOffset: -4
|
||||
|
||||
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
|
||||
AlignAfterOpenBracket: Align
|
||||
|
||||
# 连续赋值时,对齐所有等号
|
||||
AlignConsecutiveAssignments: false
|
||||
|
||||
# 连续声明时,对齐所有声明的变量名
|
||||
AlignConsecutiveDeclarations: false
|
||||
|
||||
# 右对齐逃脱换行(使用反斜杠换行)的反斜杠
|
||||
AlignEscapedNewlines: Right
|
||||
|
||||
# 水平对齐二元和三元表达式的操作数
|
||||
AlignOperands: true
|
||||
|
||||
# 对齐连续的尾随的注释
|
||||
AlignTrailingComments: true
|
||||
|
||||
# 不允许函数声明的所有参数在放在下一行
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
|
||||
# 不允许短的块放在同一行
|
||||
AllowShortBlocksOnASingleLine: true
|
||||
|
||||
# 允许短的case标签放在同一行
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
|
||||
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
|
||||
# 允许短的if语句保持在同一行
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
|
||||
# 允许短的循环保持在同一行
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
|
||||
# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),
|
||||
# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
|
||||
AlwaysBreakAfterReturnType: None
|
||||
|
||||
# 总是在多行string字面量前换行
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
|
||||
# 总是在template声明后换行
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
|
||||
# false表示函数实参要么都在同一行,要么都各自一行
|
||||
BinPackArguments: true
|
||||
|
||||
# false表示所有形参要么都在同一行,要么都各自一行
|
||||
BinPackParameters: true
|
||||
|
||||
# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
|
||||
BraceWrapping:
|
||||
# class定义后面
|
||||
AfterClass: false
|
||||
# 控制语句后面
|
||||
AfterControlStatement: false
|
||||
# enum定义后面
|
||||
AfterEnum: false
|
||||
# 函数定义后面
|
||||
AfterFunction: false
|
||||
# 命名空间定义后面
|
||||
AfterNamespace: false
|
||||
# struct定义后面
|
||||
AfterStruct: false
|
||||
# union定义后面
|
||||
AfterUnion: false
|
||||
# extern之后
|
||||
AfterExternBlock: false
|
||||
# catch之前
|
||||
BeforeCatch: false
|
||||
# else之前
|
||||
BeforeElse: false
|
||||
# 缩进大括号
|
||||
IndentBraces: false
|
||||
# 分离空函数
|
||||
SplitEmptyFunction: false
|
||||
# 分离空语句
|
||||
SplitEmptyRecord: false
|
||||
# 分离空命名空间
|
||||
SplitEmptyNamespace: false
|
||||
|
||||
# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
|
||||
BreakBeforeBinaryOperators: NonAssignment
|
||||
|
||||
# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),
|
||||
# Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),
|
||||
# Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom
|
||||
# 注:这里认为语句块也属于函数
|
||||
BreakBeforeBraces: Custom
|
||||
|
||||
# 在三元运算符前换行
|
||||
BreakBeforeTernaryOperators: false
|
||||
|
||||
# 在构造函数的初始化列表的冒号后换行
|
||||
BreakConstructorInitializers: AfterColon
|
||||
|
||||
#BreakInheritanceList: AfterColon
|
||||
|
||||
BreakStringLiterals: false
|
||||
|
||||
# 每行字符的限制,0表示没有限制
|
||||
ColumnLimit: 0
|
||||
|
||||
CompactNamespaces: true
|
||||
|
||||
# 构造函数的初始化列表要么都在同一行,要么都各自一行
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
|
||||
# 构造函数的初始化列表的缩进宽度
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
|
||||
# 延续的行的缩进宽度
|
||||
ContinuationIndentWidth: 4
|
||||
|
||||
# 去除C++11的列表初始化的大括号{后和}前的空格
|
||||
Cpp11BracedListStyle: true
|
||||
|
||||
# 继承最常用的指针和引用的对齐方式
|
||||
DerivePointerAlignment: false
|
||||
|
||||
# 固定命名空间注释
|
||||
FixNamespaceComments: true
|
||||
|
||||
# 缩进case标签
|
||||
IndentCaseLabels: false
|
||||
|
||||
IndentPPDirectives: None
|
||||
|
||||
# 缩进宽度
|
||||
IndentWidth: 4
|
||||
|
||||
# 函数返回类型换行时,缩进函数声明或函数定义的函数名
|
||||
IndentWrappedFunctionNames: false
|
||||
|
||||
# 保留在块开始处的空行
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
|
||||
# 连续空行的最大数量
|
||||
MaxEmptyLinesToKeep: 1
|
||||
|
||||
# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All
|
||||
NamespaceIndentation: None
|
||||
|
||||
# 指针和引用的对齐: Left, Right, Middle
|
||||
PointerAlignment: Right
|
||||
|
||||
# 允许重新排版注释
|
||||
ReflowComments: true
|
||||
|
||||
# 允许排序#include
|
||||
SortIncludes: false
|
||||
|
||||
# 允许排序 using 声明
|
||||
SortUsingDeclarations: false
|
||||
|
||||
# 在C风格类型转换后添加空格
|
||||
SpaceAfterCStyleCast: false
|
||||
|
||||
# 在Template 关键字后面添加空格
|
||||
SpaceAfterTemplateKeyword: true
|
||||
|
||||
# 在赋值运算符之前添加空格
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
|
||||
# SpaceBeforeCpp11BracedList: true
|
||||
|
||||
# SpaceBeforeCtorInitializerColon: true
|
||||
|
||||
# SpaceBeforeInheritanceColon: true
|
||||
|
||||
# 开圆括号之前添加一个空格: Never, ControlStatements, Always
|
||||
SpaceBeforeParens: ControlStatements
|
||||
|
||||
# SpaceBeforeRangeBasedForLoopColon: true
|
||||
|
||||
# 在空的圆括号中添加空格
|
||||
SpaceInEmptyParentheses: false
|
||||
|
||||
# 在尾随的评论前添加的空格数(只适用于//)
|
||||
SpacesBeforeTrailingComments: 1
|
||||
|
||||
# 在尖括号的<后和>前添加空格
|
||||
SpacesInAngles: false
|
||||
|
||||
# 在C风格类型转换的括号中添加空格
|
||||
SpacesInCStyleCastParentheses: false
|
||||
|
||||
# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
|
||||
SpacesInContainerLiterals: true
|
||||
|
||||
# 在圆括号的(后和)前添加空格
|
||||
SpacesInParentheses: false
|
||||
|
||||
# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
|
||||
SpacesInSquareBrackets: false
|
||||
|
||||
# 标准: Cpp03, Cpp11, Auto
|
||||
Standard: Cpp11
|
||||
|
||||
# tab宽度
|
||||
TabWidth: 4
|
||||
|
||||
# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
|
||||
UseTab: Never
|
||||
25
TangDou/BeiBao/.vscode/c_cpp_properties.json
vendored
Normal file
25
TangDou/BeiBao/.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Win32",
|
||||
"compilerArgs": [
|
||||
"-fexec-charset=GBK"
|
||||
],
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/10.3.0/**",
|
||||
"C:/TDM-GCC-64/x86_64-w64-mingw32/include/**"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"_UNICODE"
|
||||
],
|
||||
"compilerPath": "C:/TDM-GCC-64/bin/gcc.exe",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17",
|
||||
"intelliSenseMode": "gcc-x64"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
5
TangDou/BeiBao/.vscode/extensions.json
vendored
Normal file
5
TangDou/BeiBao/.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"MS-CEINTL.vscode-language-pack-zh-hans"
|
||||
]
|
||||
}
|
||||
28
TangDou/BeiBao/.vscode/launch.json
vendored
Normal file
28
TangDou/BeiBao/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
|
||||
"type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
|
||||
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
|
||||
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
|
||||
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
|
||||
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
|
||||
"externalConsole": false,
|
||||
"cwd": "${fileDirname}\\", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
|
||||
"environment": [], // 环境变量
|
||||
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
|
||||
"MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
|
||||
"miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
|
||||
"setupCommands": [
|
||||
{ // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": false
|
||||
}
|
||||
],
|
||||
"preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
|
||||
}
|
||||
]
|
||||
}
|
||||
112
TangDou/BeiBao/.vscode/settings.json
vendored
Normal file
112
TangDou/BeiBao/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"files.defaultLanguage": "c", // ctrl+N新建文件后默认的语言
|
||||
"editor.formatOnType": true, // 输入分号(C/C++的语句结束标识)后自动格式化当前这一行的代码
|
||||
"editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了
|
||||
"editor.acceptSuggestionOnEnter": "off", // 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense
|
||||
|
||||
"code-runner.runInTerminal": true, // 设置成false会在“输出”中输出,无法输入
|
||||
"code-runner.saveFileBeforeRun": true, // run code前保存
|
||||
"code-runner.preserveFocus": true, // 若为false,run code后光标会聚焦到终端上。如果需要频繁输入数据可设为false
|
||||
"code-runner.clearPreviousOutput": false, // 每次run code前清空属于code runner的终端消息,默认false
|
||||
"code-runner.ignoreSelection": true, // 默认为false,效果是鼠标选中一块代码后可以单独执行,但C是编译型语言,不适合这样用
|
||||
|
||||
"C_Cpp.clang_format_sortIncludes": true,
|
||||
"files.associations": {
|
||||
"array": "cpp",
|
||||
"atomic": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"deque": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"algorithm": "cpp",
|
||||
"memory": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"optional": "cpp",
|
||||
"string": "cpp",
|
||||
"string_view": "cpp",
|
||||
"system_error": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"fstream": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"iostream": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"new": "cpp",
|
||||
"ostream": "cpp",
|
||||
"sstream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"valarray": "cpp",
|
||||
"cassert": "cpp",
|
||||
"cerrno": "cpp",
|
||||
"cfloat": "cpp",
|
||||
"chrono": "cpp",
|
||||
"ciso646": "cpp",
|
||||
"climits": "cpp",
|
||||
"complex": "cpp",
|
||||
"csetjmp": "cpp",
|
||||
"csignal": "cpp",
|
||||
"cstring": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cuchar": "cpp",
|
||||
"numeric": "cpp",
|
||||
"ratio": "cpp",
|
||||
"version": "cpp",
|
||||
"bitset": "cpp",
|
||||
"regex": "cpp",
|
||||
"random": "cpp",
|
||||
"unordered_set": "cpp",
|
||||
"list": "cpp",
|
||||
"any": "cpp",
|
||||
"functional": "cpp",
|
||||
"mutex": "cpp",
|
||||
"shared_mutex": "cpp",
|
||||
"thread": "cpp",
|
||||
"variant": "cpp",
|
||||
"map": "cpp",
|
||||
"scoped_allocator": "cpp",
|
||||
"future": "cpp",
|
||||
"iomanip": "cpp",
|
||||
"forward_list": "cpp",
|
||||
"bit": "cpp",
|
||||
"ccomplex": "cpp",
|
||||
"cfenv": "cpp",
|
||||
"charconv": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"codecvt": "cpp",
|
||||
"condition_variable": "cpp",
|
||||
"cstdalign": "cpp",
|
||||
"cstdbool": "cpp",
|
||||
"ctgmath": "cpp",
|
||||
"set": "cpp",
|
||||
"iterator": "cpp",
|
||||
"filesystem": "cpp",
|
||||
"ios": "cpp",
|
||||
"locale": "cpp",
|
||||
"queue": "cpp",
|
||||
"stack": "cpp",
|
||||
"typeindex": "cpp",
|
||||
"compare": "cpp",
|
||||
"concepts": "cpp",
|
||||
"coroutine": "cpp",
|
||||
"numbers": "cpp",
|
||||
"ranges": "cpp",
|
||||
"span": "cpp",
|
||||
"stop_token": "cpp"
|
||||
}, // 格式化时调整include的顺序(按字母排序)
|
||||
}
|
||||
40
TangDou/BeiBao/.vscode/tasks.json
vendored
Normal file
40
TangDou/BeiBao/.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
// https://code.visualstudio.com/docs/editor/tasks
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
|
||||
"command": "g++", // 要使用的编译器,C++用g++
|
||||
"args": [
|
||||
"${file}",
|
||||
"-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
|
||||
"${fileDirname}\\${fileBasenameNoExtension}.exe",
|
||||
"-g", // 生成和调试有关的信息
|
||||
"-Wall", // 开启额外警告
|
||||
"-static-libgcc", // 静态链接libgcc,一般都会加上
|
||||
"-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这一条会导致Win下输出中文乱码
|
||||
"-std=c++17", // C++最新标准为c++17,或根据自己的需要进行修改
|
||||
], // 编译的命令,其实相当于VSC帮你在终端中输了这些东西
|
||||
"type": "process", // process是vsc把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true // 不为true时ctrl shift B就要手动选择了
|
||||
},
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
"reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档
|
||||
"focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
|
||||
"panel": "shared" // 不同的文件的编译信息共享一个终端面板
|
||||
},
|
||||
},
|
||||
{
|
||||
"label": "commit gitee",
|
||||
"type": "shell",
|
||||
"command": "D:\\python\\一键推拉.cmd",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
18
TangDou/BeiBao/MaxMin/01_Below1.cpp
Normal file
18
TangDou/BeiBao/MaxMin/01_Below1.cpp
Normal file
@@ -0,0 +1,18 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = m; j >= v; j--)
|
||||
f[j] = max(f[j], f[j - v] + w);
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
20
TangDou/BeiBao/MaxMin/01_Below2.cpp
Normal file
20
TangDou/BeiBao/MaxMin/01_Below2.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] = max(f[i][j], f[i - 1][j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
26
TangDou/BeiBao/MaxMin/01_EqMax1.cpp
Normal file
26
TangDou/BeiBao/MaxMin/01_EqMax1.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, -INF, sizeof f);
|
||||
f[0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = m; j >= v; j--) {
|
||||
f[j] = max(f[j], f[j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
26
TangDou/BeiBao/MaxMin/01_EqMax2.cpp
Normal file
26
TangDou/BeiBao/MaxMin/01_EqMax2.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, -INF, sizeof f);
|
||||
f[0][0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] = max(f[i][j], f[i - 1][j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
24
TangDou/BeiBao/MaxMin/01_EqMin1.cpp
Normal file
24
TangDou/BeiBao/MaxMin/01_EqMin1.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
memset(f, INF, sizeof f);
|
||||
f[0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = m; j >= v; j--)
|
||||
f[j] = min(f[j], f[j - v] + w);
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
25
TangDou/BeiBao/MaxMin/01_EqMin2.cpp
Normal file
25
TangDou/BeiBao/MaxMin/01_EqMin2.cpp
Normal file
@@ -0,0 +1,25 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
memset(f, INF, sizeof f);
|
||||
f[0][0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] = min(f[i][j], f[i - 1][j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
25
TangDou/BeiBao/MaxMin/Wq_AboveMin1.cpp
Normal file
25
TangDou/BeiBao/MaxMin/Wq_AboveMin1.cpp
Normal file
@@ -0,0 +1,25 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, INF, sizeof f);
|
||||
f[0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = m; j >= 0; j--)
|
||||
f[j] = min(f[j], f[max(0, j - v)] + w);//即使物品体积比j大,j - v < 0,也能选,等价于f[0]
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
26
TangDou/BeiBao/MaxMin/Wq_AboveMin2.cpp
Normal file
26
TangDou/BeiBao/MaxMin/Wq_AboveMin2.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, INF, sizeof f);
|
||||
f[0][0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = min(f[i - 1][j], f[i][max(0, j - v)] + w);//即使物品体积比j大,j - v < 0,也能选,等价于f[i - 1][0]
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
26
TangDou/BeiBao/MaxMin/Wq_EqMax1.cpp
Normal file
26
TangDou/BeiBao/MaxMin/Wq_EqMax1.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, -INF, sizeof f);
|
||||
f[0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = v; j <= m; j++) {
|
||||
f[j] = max(f[j], f[j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
26
TangDou/BeiBao/MaxMin/Wq_EqMax2.cpp
Normal file
26
TangDou/BeiBao/MaxMin/Wq_EqMax2.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, -INF, sizeof f);
|
||||
f[0][0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] = max(f[i][j], f[i][j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
24
TangDou/BeiBao/MaxMin/Wq_EqMin1.cpp
Normal file
24
TangDou/BeiBao/MaxMin/Wq_EqMin1.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110, INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, INF, sizeof f);
|
||||
f[0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = v; j <= m; j++) {
|
||||
f[j] = min(f[j], f[j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
26
TangDou/BeiBao/MaxMin/Wq_EqMin2.cpp
Normal file
26
TangDou/BeiBao/MaxMin/Wq_EqMin2.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
|
||||
memset(f, INF, sizeof f);
|
||||
f[0][0] = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v, w;
|
||||
cin >> v >> w;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] = min(f[i][j], f[i][j - v] + w);
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
20
TangDou/BeiBao/PlanCount/01_Above1.cpp
Normal file
20
TangDou/BeiBao/PlanCount/01_Above1.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
f[0] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = m; j >= 0; j--)//即使物品体积比j大,j - v < 0,也能选,等价于f[0]
|
||||
f[j] = f[j] + f[max(0, j - v)];
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
20
TangDou/BeiBao/PlanCount/01_Above2.cpp
Normal file
20
TangDou/BeiBao/PlanCount/01_Above2.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
f[0][0] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = 0; j <= m; j++)//即使物品体积比j大,j - v < 0,也能选,等价于f[i - 1][0]
|
||||
f[i][j] = f[i - 1][j] + f[i - 1][max(0, j - v)];
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
21
TangDou/BeiBao/PlanCount/01_Below1.cpp
Normal file
21
TangDou/BeiBao/PlanCount/01_Below1.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 0; i <= m; i++) f[i] = 1;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = m; j >= v; j--) f[j] = f[j] + f[j - v];
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
24
TangDou/BeiBao/PlanCount/01_Below2.cpp
Normal file
24
TangDou/BeiBao/PlanCount/01_Below2.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];//第一维:前i个物品,第二维:体积j及以下
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
//初始化
|
||||
for (int i = 0; i <= m; i++) f[0][i] = 1;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] += f[i - 1][j - v];
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
20
TangDou/BeiBao/PlanCount/01_Eq1.cpp
Normal file
20
TangDou/BeiBao/PlanCount/01_Eq1.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
f[0] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = m; j >= v; j--)
|
||||
f[j] = f[j] + f[j - v];
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
22
TangDou/BeiBao/PlanCount/01_Eq2.cpp
Normal file
22
TangDou/BeiBao/PlanCount/01_Eq2.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
f[0][0] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] += f[i - 1][j - v];
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
20
TangDou/BeiBao/PlanCount/Wq_Below1.cpp
Normal file
20
TangDou/BeiBao/PlanCount/Wq_Below1.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 0; i <= m; i++) f[i] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = v; j <= m; j++) f[j] = f[j] + f[j - v];
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
22
TangDou/BeiBao/PlanCount/Wq_Below2.cpp
Normal file
22
TangDou/BeiBao/PlanCount/Wq_Below2.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 0; i <= m; i++) f[0][i] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] += f[i][j - v];
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
18
TangDou/BeiBao/PlanCount/Wq_Eq1.cpp
Normal file
18
TangDou/BeiBao/PlanCount/Wq_Eq1.cpp
Normal file
@@ -0,0 +1,18 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
int n, m;
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
f[0] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = v; j <= m; j++) f[j] = f[j] + f[j - v];
|
||||
}
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
21
TangDou/BeiBao/PlanCount/Wq_Eq2.cpp
Normal file
21
TangDou/BeiBao/PlanCount/Wq_Eq2.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
int n, m;
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
f[0][0] = 1;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int v;
|
||||
cin >> v;
|
||||
for (int j = 0; j <= m; j++) {
|
||||
f[i][j] = f[i - 1][j];
|
||||
if (j >= v) f[i][j] += f[i][j - v];
|
||||
}
|
||||
}
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
76
TangDou/BeiBao/Shopping.cpp
Normal file
76
TangDou/BeiBao/Shopping.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
#include<bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
struct Node {
|
||||
int weight; //重量
|
||||
int volume; //体积
|
||||
int money; //让利金额
|
||||
} a[N];
|
||||
|
||||
/**
|
||||
测试用例
|
||||
10 9 4
|
||||
8 3 6
|
||||
5 4 5
|
||||
3 7 7
|
||||
4 5 4
|
||||
*/
|
||||
|
||||
//在取得最大让利金额的时候,到底是拿了哪些商品?
|
||||
string s[N][N][N];
|
||||
|
||||
//三维数组用来装最大优惠结果集
|
||||
int yh[N][N][N];
|
||||
|
||||
int main() {
|
||||
//w:可以提起 w 单位重量的东西,
|
||||
//v:有一个能装v个单位体积的购物袋
|
||||
//n:为商品种类数
|
||||
int w, v, n;
|
||||
cin >> w >> v >> n;
|
||||
for (int i = 1; i <= n; i++) cin >> a[i].weight >> a[i].volume >> a[i].money;
|
||||
|
||||
//三维数组初始化
|
||||
for (int i = 0; i <= n; i++) {
|
||||
for (int j = 0; j <= w; j++) {
|
||||
for (int k = 0; k <= v; k++) {
|
||||
yh[i][j][k] = 0;
|
||||
//初始化
|
||||
s[i][j][k] = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
//遍历每个种类
|
||||
for (int i = 1; i <= n; i++) {
|
||||
//从1开始,一个一个去增加重量尝试
|
||||
for (int j = 1; j <= w; j++) {
|
||||
//从1开始,一个个去增加体积尝试
|
||||
for (int k = 1; k <= v; k++) {
|
||||
//yh[0]是没有意义的,就是为了数学好算,也就是在未引入i时的上一个最优解
|
||||
int bn = yh[i - 1][j][k];
|
||||
int x = 0;
|
||||
//如果剩余的重量和体积都够用的时候,尝试拿当前物品
|
||||
if (j >= a[i].weight && k >= a[i].volume)
|
||||
x = yh[i - 1][j - a[i].weight][k - a[i].volume] + a[i].money;
|
||||
|
||||
if (x > bn) { //如果拿了比不拿价值大,就拿这个物品
|
||||
yh[i][j][k] = x;
|
||||
//同时记录拿了这个物品
|
||||
s[i][j][k] = s[i - 1][j - a[i].weight][k - a[i].volume] + " " + (char) (i + '0');
|
||||
} else {
|
||||
//否则记录当前重量和体积的最优策略是不拿
|
||||
yh[i][j][k] = bn;
|
||||
//同时记录不拿当前物品,保持和之前一样的物品列表
|
||||
s[i][j][k] = s[i - 1][j][k];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//输出
|
||||
cout << yh[n][w][v] << endl; //小惠能够得到的最大让利金额
|
||||
string str = s[n][w][v]; //依次为从小到大排列的商品序号
|
||||
cout << str.substr(1, str.size() - 1);
|
||||
}
|
||||
|
||||
6
TangDou/BeiBao/TangDou.cpp
Normal file
6
TangDou/BeiBao/TangDou.cpp
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int INF = 0x3f3f3f3f;
|
||||
|
||||
int main() { return 0; }
|
||||
24
TangDou/BeiBao/Teach/01_DP_ErWei.cpp
Normal file
24
TangDou/BeiBao/Teach/01_DP_ErWei.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 1010;
|
||||
int n, m;
|
||||
int v[N], w[N];
|
||||
int f[N][N];
|
||||
|
||||
int main() {
|
||||
//优化输入
|
||||
ios::sync_with_stdio(false);
|
||||
//物品个数n
|
||||
cin >> n >> m;
|
||||
//读入体积和重
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
|
||||
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = 1; j <= m; j++)
|
||||
if (j >= v[i]) f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]); //两种情况取最大值
|
||||
else f[i][j] = f[i - 1][j];
|
||||
|
||||
cout << f[n][m] << endl;
|
||||
return 0;
|
||||
}
|
||||
24
TangDou/BeiBao/Teach/01_DP_YiWei.cpp
Normal file
24
TangDou/BeiBao/Teach/01_DP_YiWei.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include<bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 1010;
|
||||
|
||||
int n, m;
|
||||
int v[N], w[N];
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
//优化输入
|
||||
ios::sync_with_stdio(false);
|
||||
//物品个数n
|
||||
cin >> n >> m;
|
||||
//读入体积和重量
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
|
||||
//01背包模板
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = m; j >= v[i]; j--)
|
||||
f[j] = max(f[j], f[j - v[i]] + w[i]);
|
||||
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
37
TangDou/BeiBao/Teach/01_Dfs.cpp
Normal file
37
TangDou/BeiBao/Teach/01_Dfs.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 1010;
|
||||
int n; //物品的数量
|
||||
int m; //背包的体积上限
|
||||
int w[N]; //每个物品的价值
|
||||
int v[N]; //每个物品的体积
|
||||
/**
|
||||
* 功能:深度优先搜索解决01背包
|
||||
* @param step 走到第step物品面前
|
||||
* @param r 剩余容量r
|
||||
* @return 可以获得的最大价值是多少
|
||||
*/
|
||||
int dfs(int step, int r) {
|
||||
//如果都出界了,返回0
|
||||
if (step == n + 1) return 0;
|
||||
//结果
|
||||
int res;
|
||||
//如果不够装下,只能放弃
|
||||
if (v[step] > r) res = dfs(step + 1, r);
|
||||
//如果可以装下,可以选择要、还是不要
|
||||
else res = max(dfs(step + 1, r), dfs(step + 1, r - v[step]) + w[step]);
|
||||
return res;
|
||||
}
|
||||
|
||||
int main() {
|
||||
//优化输入
|
||||
ios::sync_with_stdio(false);
|
||||
//物品个数与背包容量
|
||||
cin >> n >> m;
|
||||
//读入每个物品的体积和价值
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
|
||||
//深搜并输出结果~
|
||||
cout << dfs(1, m) << endl;
|
||||
return 0;
|
||||
}
|
||||
43
TangDou/BeiBao/Teach/01_Dfs_JYH.cpp
Normal file
43
TangDou/BeiBao/Teach/01_Dfs_JYH.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 1010;
|
||||
int n; //物品的数量
|
||||
int m; //背包的容量上限
|
||||
int w[N]; //每个物品的重量(价值)
|
||||
int v[N]; //每个物品的体积
|
||||
int dp[N][N]; //引入dp数组保存已经计算过的结果
|
||||
/**
|
||||
* 功能:深度优先搜索+记忆化解决01背包
|
||||
* @param step 走到第step物品面前
|
||||
* @param r 剩余容量r
|
||||
* @return 可以获得的最大价值是多少
|
||||
*/
|
||||
int dfs(int step, int r) {
|
||||
//判断这种情况是否被计算过
|
||||
if (dp[step][r] > 0) return dp[step][r];
|
||||
|
||||
//如果都出界了,返回0
|
||||
if (step == n + 1) return 0;
|
||||
//结果
|
||||
int res;
|
||||
//如果不够装下,只能放弃
|
||||
if (v[step] > r) res = dfs(step + 1, r);
|
||||
//如果可以装下,可以选择要、还是不要
|
||||
else res = max(dfs(step + 1, r), dfs(step + 1, r - v[step]) + w[step]);
|
||||
//保存结果
|
||||
dp[step][r] = res;
|
||||
return res;
|
||||
}
|
||||
|
||||
int main() {
|
||||
//优化输入
|
||||
ios::sync_with_stdio(false);
|
||||
//物品个数与背包容量
|
||||
cin >> n >> m;
|
||||
//读入每个物品的体积和价值
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
|
||||
//深搜并输出结果
|
||||
cout << dfs(1, m) << endl;
|
||||
return 0;
|
||||
}
|
||||
23
TangDou/BeiBao/bb01.cpp
Normal file
23
TangDou/BeiBao/bb01.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include<bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 1010;
|
||||
|
||||
int n, m;
|
||||
int v[N], w[N];
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
//物品个数n
|
||||
cin >> n >> m;
|
||||
//读入体积和重量
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
|
||||
|
||||
// 01背包模板
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = m; j >= v[i]; j--)
|
||||
f[j] = max(f[j], f[j - v[i]] + w[i]);
|
||||
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
22
TangDou/BeiBao/bb01ErWeiFeiYong.cpp
Normal file
22
TangDou/BeiBao/bb01ErWeiFeiYong.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 1010;
|
||||
const int M = 110;
|
||||
int n, V, W;
|
||||
int v1[N], v2[N], w[N];
|
||||
int f[N][M][M];
|
||||
|
||||
int main() {
|
||||
cin >> n >> V >> W;
|
||||
for (int i = 1; i <= n; i++) cin >> v1[i] >> v2[i] >> w[i];
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = 0; j <= V; j++)
|
||||
for (int k = 0; k <= W; k++)
|
||||
if (j < v1[i] || k < v2[i])
|
||||
f[i][j][k] = f[i - 1][j][k];
|
||||
else
|
||||
f[i][j][k] = max(f[i - 1][j - v1[i]][k - v2[i]] + w[i], f[i - 1][j][k]);
|
||||
printf("%d", f[n][V][W]);
|
||||
return 0;
|
||||
}
|
||||
26
TangDou/BeiBao/bbdc1.cpp
Normal file
26
TangDou/BeiBao/bbdc1.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
//多重背包问题,每件物品的数量是有限制的,不是无穷,也不是只有1个。
|
||||
// 状态表示 集合,属性
|
||||
// 状态计算
|
||||
|
||||
const int N = 110;
|
||||
|
||||
int n, m;
|
||||
int v[N], w[N], s[N];
|
||||
int f[N];
|
||||
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i] >> s[i];
|
||||
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = m; j >= 0; j--)
|
||||
for (int k = 0; k <= s[i] && k * v[i] <= j; k++) //穷举所有可能性,尝试拿到最大的合理值
|
||||
f[j] = max(f[j], f[j - v[i] * k] + w[i] * k);
|
||||
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
34
TangDou/BeiBao/bbdc2.cpp
Normal file
34
TangDou/BeiBao/bbdc2.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 12010;
|
||||
int n, m;
|
||||
int v[N], w[N];
|
||||
int f[N];
|
||||
int idx;
|
||||
//多重背包的二进制优化
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
int vi, wi, si;
|
||||
cin >> vi >> wi >> si;//二进制优化,能打包则打包之,1,2,4,8,16,...
|
||||
int b = 1;
|
||||
while (b <= si) {
|
||||
v[++idx] = vi * b;
|
||||
w[idx] = wi * b;
|
||||
si -= b;
|
||||
b *= 2;
|
||||
}
|
||||
//剩下的
|
||||
if (si > 0) {
|
||||
v[++idx] = vi * si;
|
||||
w[idx] = wi * si;
|
||||
}
|
||||
}
|
||||
for (int i = 1; i <= idx; i++)
|
||||
for (int j = m; j >= v[i]; j--)
|
||||
f[j] = max(f[j], f[j - v[i]] + w[i]);
|
||||
|
||||
printf("%d", f[m]);
|
||||
return 0;
|
||||
}
|
||||
28
TangDou/BeiBao/bbdc3.cpp
Normal file
28
TangDou/BeiBao/bbdc3.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const int N = 1010;
|
||||
const int M = 20010;
|
||||
int n, m;
|
||||
int v[N], w[N], s[N];
|
||||
int f[N][M];
|
||||
int q[M];
|
||||
//多重背包之单调队列优化
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i] >> s[i];
|
||||
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int r = 0; r < v[i]; r++) {
|
||||
int hh = 0, tt = -1;
|
||||
for (int j = r; j <= m; j += v[i]) {
|
||||
while (hh <= tt && j - q[hh] > s[i] * v[i]) hh++;
|
||||
while (hh <= tt && f[i - 1][q[tt]] + (j - q[tt]) / v[i] * w[i] <= f[i - 1][j]) tt--;
|
||||
q[++tt] = j;
|
||||
f[i][j] = f[i - 1][q[hh]] + (j - q[hh]) / v[i] * w[i];
|
||||
}
|
||||
}
|
||||
printf("%d", f[n][m]);
|
||||
return 0;
|
||||
}
|
||||
33
TangDou/BeiBao/bbfz.cpp
Normal file
33
TangDou/BeiBao/bbfz.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 110;
|
||||
|
||||
int n; //n类物品
|
||||
int m; //背包上限为m
|
||||
int v[N][N]; //体积
|
||||
int w[N][N]; //价值
|
||||
int s[N]; //每类物品的个数
|
||||
int f[N]; //dp数组,最大值
|
||||
|
||||
//分组背包
|
||||
int main() {
|
||||
//优化输入
|
||||
ios::sync_with_stdio(false);
|
||||
cin >> n >> m;
|
||||
|
||||
for (int i = 1; i <= n; i++) {//枚举每类物品,比如:水果,蔬菜,肉类...
|
||||
cin >> s[i]; //此类物品中物品的个数,比如2,可能是苹果、香蕉
|
||||
for (int j = 1; j <= s[i]; j++)//读入苹果、香蕉的体积和价值
|
||||
cin >> v[i][j] >> w[i][j];
|
||||
}
|
||||
|
||||
for (int i = 1; i <= n; i++) //遍历每类物品
|
||||
for (int j = m; j >= 0; j--) //遍历每个可能的体积
|
||||
for (int k = 1; k <= s[i]; k++)//遍历k个物品
|
||||
if (v[i][k] <= j)
|
||||
f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
|
||||
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
23
TangDou/BeiBao/bbwq.cpp
Normal file
23
TangDou/BeiBao/bbwq.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
const int N = 1010;
|
||||
|
||||
int n, m;
|
||||
int v[N];
|
||||
int w[N];
|
||||
int f[N];
|
||||
|
||||
// 完全背包问题
|
||||
int main() {
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
|
||||
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = v[i]; j <= m; j++) //一个一个加上来,求一个最大值
|
||||
f[j] = max(f[j], f[j - v[i]] + w[i]);
|
||||
|
||||
cout << f[m] << endl;
|
||||
return 0;
|
||||
}
|
||||
BIN
TangDou/BeiBao/背包四讲.pptx
Normal file
BIN
TangDou/BeiBao/背包四讲.pptx
Normal file
Binary file not shown.
Reference in New Issue
Block a user