首页 > 其他分享 >「学习笔记」对拍

「学习笔记」对拍

时间:2023-06-06 19:24:25浏览次数:42  
标签:return minn int 笔记 学习 dfs txt dp

在考试中,我们对于一道题目,一般会有两份代码,一份暴力,一份正解。
只有一份的情况不算
这时,我们需要通过自己造数据来检查我们的正解是否正确,当然,在此之前,请先确保你的暴力是正确的。
下面是一份暴力的代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 3010;

int T, n;
int dp[N][N], c[N];

int dfs(int l, int r) {
	if (~dp[l][r])	return dp[l][r];
	int minn = 1e9 + 5;
	for (int k = l; k < r; ++ k) {
		minn = min(minn, dfs(l, k) + dfs(k + 1, r) + (c[k] != c[r]));
	}
	return dp[l][r] = minn;
}

void work() {
	cin >> n;
	for (int i = 1; i <= n; ++ i) {
		for (int j = 1; j <= n; ++ j) {
			dp[i][j] = -1;
		}
	}
	for (int i = 1; i <= n; ++ i) {
		cin >> c[i];
		dp[i][i] = 0;
	}
	cout << dfs(1, n) << '\n';
	return ;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> T;
	while (T --) {
		work();
	}
	return 0;
}

我们再来一份正解代码

// zhengjie.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 3010;

int T, n;
int dp[N][N], c[N];
vector<int> pos[N];

int dfs(int l, int r) {
	if (l > r)	return 1e9 + 5;
	if (~dp[l][r])	return dp[l][r];
	int minn = 1e9 + 5;
	minn = min(minn, dfs(l, r - 1) + (c[r - 1] != c[r]));
	minn = min(minn, dfs(l + 1, r) + (c[l] != c[r]));
	for (int k : pos[c[r]]) {
		if (k + 1 > r || k < l)	continue;
		minn = min(minn, dfs(l, k) + dfs(k + 1, r));
	}
	return dp[l][r] = minn;
}

void work() {
	cin >> n;
	for (int i = 1; i <= n; ++ i) {
		for (int j = 1; j <= n; ++ j) {
			dp[i][j] = -1;
		}
		pos[i].clear();
	}
	for (int i = 1; i <= n; ++ i) {
		cin >> c[i];
		dp[i][i] = 0;
		pos[c[i]].push_back(i);
	}
	cout << dfs(1, n) << '\n';
	return ;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> T;
	while (T --) {
		work();
	}
	return 0;
}

现在,我们需要一个数据生成器

#include <bits/stdc++.h>
using namespace std;

int vis[3010];

int main() {
	srand(time(0));
	int T = rand() % 10 + 1;
	cout << T << '\n';
	while (T --) {
		int n = rand() % 300 + 1;
		cout << n << '\n';
		for (int i = 1; i <= n; ++ i) {
			vis[i] = 0;
		}
		for (int i = 1; i <= n; ++ i) {
			int col = rand() % n + 1;
			while (vis[col] == 20) {
				col = rand() % n + 1;
			}
			vis[col] ++;
			cout << col << ' ';
		}
		putchar('\n');
	}
	return 0;
}

最后,再来一个比较程序。

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

int main() {
	int T = 1000; // 设定对拍次数
	while (T) {
		-- T;
		system("date.exe > in.txt"); // 将 date.exe 的输出内容输出到 in.txt 中
		system("baoli.exe < in.txt > baoli.txt"); // 将 baoli.exe 的输出内容输出到 baoli.txt 中
		system("zhengjie.exe < in.txt > zhengjie.txt"); // 将 zhengjie.exe 的输出内容输出到 zhengjie.txt 中
		if (system("fc baoli.txt zhengjie.txt"))	break; // fc 比较文件,相同则返回 0,不同则返回 1
	}
	if (T)	puts("error"); // 如果 T 不为 0,说明是 break 退出的,即有错误
	else puts("no error");
	return 0;
}

完成!

标签:return,minn,int,笔记,学习,dfs,txt,dp
From: https://www.cnblogs.com/yifan0305/p/17461106.html

相关文章

  • Python机器学习——识别不同鸟类
    (一)选题背景:鸟类是野生动物的重要组成部分,是自然界的一项重要资源动物,也是生态系统中的重要组成部分。鸟类是可更新的自然资源,它在商业、旅游、美学、文化、科学和生态上都有重要价值。国内近年来鸟类系统发育与分类、分布的研究不断取得新的成果,这些对于研究我国的鸟类分类区......
  • Unity URP简单笔记by me
    URP的特点相对于内置管线,具有更好的性能和更高的画质更好的跨平台性,能在VR、移动端、PC端、主机端保持接近的性能与效果和HDRP一样,是基于SRP的可定制渲染管线,在多个方面具有更好的自定义性可以使用连连看ShaderGraph 需要掌握URP的新知识如何将内置管线转换为URP(导入......
  • AbstractQueuedSynchronizer 学习
    参考资料:1、深入浅出AQS之独占锁模式https://www.jianshu.com/p/71449a7d01af2、深入浅出AQS之共享锁模式https://www.jianshu.com/p/1161d33fc1d0独占式获取过程:1、线程调用acquire()方法获取同步状态state2、如果tryAcquire()返回为false(获取失败),将会调用addWaiter(Nod......
  • JDK 1.6 与 1.8 中的 ConcurrentHashMap 学习
    ConcurrentHashMap使用segment(继承ReentrantLock)和volatile来保证线程安全性segment的数量为16,每个segment中桶(HashEntry[])的数量可以增加,桶中放的是由HashEntry组成的链表;count表示segment中元素的数量,modCount统计导致结构变化操作的次数(put、remove、replace......
  • 0007.有监督学习之集成学习(Adaboost算法)
    一、集成学习概述1.集成学习算法定义集成学习(Ensemblelearning)就是将若干个弱分类器通过一定的策略组合之后产生一个强分类器。弱分类器(weakClassifier)指的就是哪些分类准确率只比随机猜测略好一点的分类器,而强分类器(StrongClassifier)的分类准确率会高很多。这里的“强”&......
  • webpack笔记
    webpack笔记webpack是一个现代JavaScript应用程序的静态模块打包器(modulebundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图(dependencygraph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。webpack自身只理解JavaScript......
  • 《大学物理实验上》期末笔记(一)不确定度的计算
    《大学物理实验上》期末笔记(一)不确定度的计算什么是不确定度?​ ★不确定度表示测量值可能变动(不能确定)的范围,也是与测量结果相关的一个参数,用于合理表示由于测量误差的存在而对被测量值的不能肯定的程度。​ 简单来说,我们测得一组值,分别为\(x_1,x_2,x_3...x_n\),我们可以通过......
  • 小白上车,又学习了一点
    #include<stdio.h>intmain(){ inta=0; charpassword[40]={0}; printf("输入密码="); scanf("%s",password); getchar(); printf("确认(Y/N:"); a=getchar(); if(a=='Y') { printf("输入正确\n"......
  • maven学习
    1.maven简介1.1软件是一个工程完成一个java项目,需要做哪些工作?分析项目要做什么,知道项目有哪些组成部分。设计项目,通过哪些步骤,使用哪些技术。需要多少人,多长的时间。组建团队,招人,购置设备,服务器,软件,笔记本。开发人员写代码。开发人员需要测试自己写代码。重复多次......
  • 开始学习spring 最初配置 步骤
    一:新建项目idea-----newproject----在Buildsystem在选择Maven---然后选create创建二:在file中选择ProjectStructure ---- 然后选择Modules----在Depedencies(依赖)中选择 加号 然后在本地电脑上导入所需要的jar包,记得每个jar包之前要选择打上对勾, 然后点击A......