C++:对拍(教程超详细)
hello大家好,这里是霍田的博客。
今天我们来聊聊对拍(C++的版本)。
(求点赞,求关注,求收藏 o(* ̄▽ ̄*)ブ)
一、对拍是什么
对拍字面意思就是“两份代码运行构造的样例,对着看结果”,
能够在比赛中快速找出自己代码的错误。
二、对拍怎么写
1.准备:
(1).一台Windows电脑。
(2).一个代码编辑器,如VSCode,Dev-C++即可(不必装太大的软件)(点蓝字即可查看VSCode安装攻略)
2.操作
(1).打开VSCode
(2).新建3个文件,命名要以.cpp结尾。
例如:taotaozhaipingguo-std.cpp taotaozhaipingguo-bl.cpp taotaozhaipingguo-gen.cpp
(建议大家按照:【题目名称/题目编号-干什么用的.cpp】来写。(std就是现在有问题的程序,bl就是这个题的暴力写法(一定要是正确的!),gen就是构造数据的))
std.cpp示例如下:(01背包)
#include <bits/stdc++.h>
using namespace std;int n, m, v[1001], w[1001], f[1001][1001];int main() {cin >> n >> m;for(int i = 1; i <= n; i ++) {cin >> v[i] >> w[i];}memset(f, 128, sizeof(f));f[0][0] = 0;for(int i = 1; i <= n; i ++) {for(int j = 0; j <= m; j++) {if(j <= v[i])f[i][j] = f[i - 1][j];elsef[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);}}int ans = 0;for(int i = 0; i <= m; i ++) {ans = max(ans, f[n][i]);}cout << ans << endl;
}
gen.cpp示例如下:(01背包)
#include <bits/stdc++.h>
using namespace std;int main() {srand(time(0));int n = rand() % 20 + 1;int m = rand() % 1000 + 1;printf("%d\n", n);for(int i = 1; i <= n; i ++) {int v = rand() % 10 + 1;int w = rand() % 10 + 1;printf("%d %d\n", v, w);}
}
bl.cpp示例如下:(01背包)
#include <bits/stdc++.h>
using namespace std;int n, m, v[1001], w[1001], f[1001][1001];int main() {cin >> n >> m;for(int i = 1; i <= n; i ++) {cin >> v[i] >> w[i];}memset(f, 0, sizeof(f));for(int i = 1; i <= n; i ++) {for(int j = 0; j <= m; j++) {if(j < v[i])f[i][j] = f[i - 1][j];elsef[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);}}int ans = 0;ans = max(ans, f[n][m]);cout << ans << endl;
}
(3).新建一个bat文件,命名方式:【题目名称/题目编号-duipai.bat】
duipai.bat文件示例如下:
g++ gen.cpp -o gen -g -O2
g++ std.cpp -o std -g -O2
g++ bl.cpp -o bl -g -O2:loopgen > 1.txt;std < 1.txt > 2.txtbl < 1.txt > 3.txtfc 2.txt 3.txtif errorlevel 1 pause
goto loop
随后退出VScode,在文件夹中启动duipai.bat程序即可。