首页 > 其他分享 >数据对拍器简单介绍

数据对拍器简单介绍

时间:2023-04-21 12:06:24浏览次数:28  
标签:include int 拍器 介绍 简单 input txt dp out


文章目录

  • 数据对拍
  • 举例
  • dp
  • 暴力
  • 数据对拍
  • 总结

数据对拍

使用数据对拍的功能来检测代码有没有出错误。

步骤:针对某个题的做题过程

  1. 首先写这道题的你认为的优化做法,因为一般的算法竞赛中肯定不可能是暴力的。
  2. 然后写这道题的暴力做法。
  3. 然后写数据对拍器,比较数据的差异

举例

2. 01背包问题

dp

对于背包问题我们可以有 dp动态规划的做法(这是最基本的),代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e3+10;
int n,v;
int nums[N],val[N],dp[N];
int main()
{
	cin>>n>>v;
 	for (int i=1;i<=n;i++){
    	cin>>nums[i]>>val[i];
 	}
 	for (int i=1;i<=n;i++){
 		for (int j=v;j>=nums[i];j--){
 			dp[j]=max(dp[j],dp[j-nums[i]]+val[i]);	
		}
	}
 	cout<<dp[v];
 	return 0;
}

暴力

对于01背包的暴力方法,我们考虑二进制枚举的思想

对于每一个 n,我们都把它转换为二进制的形式,其中 1表示选择这个物品,0表示不选择这个物品,则通过暴力枚举二进制的所有的01情况,来得到每一种情况的背包价值,然后得到ans

假设n=5 ,则我们需要枚举 00000 - 11111共32种情况,即 1<<5种,然后通过一层循环来获得二进制中所有的1,然后进行数据的累加。

注意我们的范围都是从 0开始的,因为二进制中全0表示都不选,全1表示全选,因此我们的for循环要写成这样的形式:

for (int i=0;i<(1<<n);i++)

代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e3+10;
int n,W;
int w[N],v[N];
int main(){
	cin>>n>>W;
	for (int i=0;i<n;i++){
		cin>>w[i]>>v[i];
	}
	int ans=0;
	for (int i=0;i<(1<<n);i++){
		int sumv=0,sumw=0;
		for (int j=0;j<n;j++){
			if (i>>j&1){
				sumv+=v[j];
				sumw+=w[j];
			}
		}
		if (sumw<=W){
			ans=max(ans,sumv);
		}
	}
	cout<<ans;
	return 0;
}

数据对拍

然后就到了我们的重头戏:数据对拍,首先把生面生成的两个exe放到同一文件夹下面

基本思路:

  1. 通过随机产生数据,把数据存储到 input.txt中。
  2. 对于上面的两个exe程序,从文件读取内容,然后分别把两个运行的结存储到两个xx_out,txt文件中。
  3. 然后比较这两个xxx_out.txt文件内容是否是一致的。

如何进行文件的读写?

  • 头文件:#include <fstream>表示对文件流操作;
  • ofstream out(input.txt)输出重定向到文件中
  • ifstream in(input.txt)输入重定向到文件中

system对文件的操作

  • system("dp.exe < input.txt > dp_out.txt"),dp解法从文件读取数据,然后把dp.exe的输出重定向到dp_out.txt中;对于暴力也是同理。
  • system("fc dp_out.txt baoli_out.txt"),比较两个文件是否存在差异。

如果没有差异,证明我们写的解法基本上是正确的。

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

void generate_data(){
	ofstream out("input.txt");
	out<<10<<' '<<rand()%200+50<<endl;//物品数量和背包容量 
	for (int i=1;i<=10;i++){
		int w=rand()%50+10,v=rand()%50+10;
		out<<w<<' '<<v<<endl;
	}
	out.close();
}
int main(){
	for (int i=1;i<=100;i++){
		cout<<"i = "<<i<<":";
		generate_data();
		system("dp.exe < input.txt > dp_out.txt");
		system("baoli.exe < input.txt > baoli_out.txt");
		system("fc dp_out.txt baoli_out.txt"); 	
	}
	return 0;
}

总结

通过手写两种解法(优化 and 暴力)并且通过数据对拍的功能来实现降低我们程序出错的可能性,数据对拍在蓝桥杯等竞赛中是一个不错的技巧。


标签:include,int,拍器,介绍,简单,input,txt,dp,out
From: https://blog.51cto.com/u_15744744/6212416

相关文章

  • java 实现简单的http服务器
    1、废话不多说,代码如下packagecom.linhuaming.test;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.ServerSocket;importjava.net.Socket;/***http服务器测试*/publicclassHttpServerTest{publi......
  • PO模式介绍、PO模式封装、数据驱动
    一、PO模式介绍1、认识PO模式 2、PO模式页面对象 3、PO如何做Base层:存放所有页面的公共方法Page层:基于页面或者模块单独封装当前页面要操作的对象Script层:脚本测试+unittest  ......
  • wxmini介绍
    原文地址www.zhihu.com专栏Mini写文章Mini残枫cps·1篇内容收录内容修改介绍wxmini介绍残枫cps公众号:营销与信息的传递;操作延时较大;基于h5小程序:产品与服务;自生开发环境与语言;微信内的云端应用;发布于2023-04-1709:50​赞同​添加评论​分享​收藏​收起​......
  • scapy函数介绍
    1、读取报文>>>packets=rdpcap("d.pcap")2、查看原始数据>>>raw(packets[0])b'\x00\x16>3\x02d\x00\x16>\\\xf2\xa3\x08\x00E\x00\x00(\x00\x01\x00\x00@\x063\x18\xc0\xa8\x05;\xb5*\xcc\xa9$\xfc\x01\x......
  • 边缘人工智能介绍
    什么是边缘人工智能,它是如何工作的?边缘人工智能(EdgeAI)是一种制作人工智能工作流程的范式,其范围从集中式数据中心(云)到网络的最边缘。网络的边缘指的是终端,甚至可以包括用户设备。边缘人工智能与更常见的做法形成对比,即人工智能应用程序完全在云中开发和运行。这种做法,人们已经开......
  • Spring的Factories机制介绍
    Java的SPI机制JavaSpringBoot加载yml配置文件中字典项Spring的Factories就是Spring版本的JavaSpi。SpringFactories的最重要的功能就是:可以通过配置文件指定Spring容器加载一些特定的组件。SpringFactories是一种类似于JavaSPI的机制,它在META-INF/spring.factories......
  • A - 简单字符串排序
    A- 简单字符串排序TimeLimit:5000MS     MemoryLimit:100000KB     64bitIOFormat:%lld&%lluSubmit StatusDescription从键盘输入10个学生的姓名和成绩,请按字典序排列学生的姓名并输出(姓名和成绩对应关系保持不变)。Input输入共11行,前10行......
  • UVA Immediate Decodability(简单字典树)
    ImmediateDecodabilityTimeLimit:3000MS     MemoryLimit:0KB     64bitIOFormat:%lld&%lluSubmit StatusDescription  ImmediateDecodability Anencodingofasetofsymbolsissaidtobe immediately decodableifnocode......
  • 简单背包
    简单背包TimeLimit:1000MS     MemoryLimit:32768KB     64bitIOFormat:%I64d&%I64uSubmit StatusDescription在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 Inpu......
  • C#基础 ref out 函数参数 不算重载的简单示例
     .NETFramework:4.7.2       IDE:VisualStudioCommunity2019        OS:Windows10x64    typesetting:Markdown codeusingSystem;namespaceConsoleApp{classProgram{staticvoidMain(string[]args){......