Cow Exhibition G的来龙去脉

news2024/11/16 5:55:59

[USACO03FALL] Cow Exhibition G - 洛谷

曲折经过

爆搜

一开始没什么好的想法,就针对每头奶牛去or不去进行了爆搜。

#include <cstdio>
#include <algorithm>
using namespace std;

#define maxn 405
int iq[maxn], eq[maxn];
int ans;
int n;

void dfs(int k, int sumiq, int sumeq) {
    //printf("k:%d,sumiq %d, sumeq %d\n", k, sumiq, sumeq);

    if (k == n + 1) {
    if (sumiq < 0 | sumeq < 0) {
    return;
    }
    ans = max(ans, sumiq + sumeq);
    return;
    }

    dfs(k + 1, sumiq + iq[k], sumeq + eq[k]);
    dfs(k + 1, sumiq, sumeq);
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
    scanf("%d %d", &iq[i], &eq[i]);
    }
    dfs(1, 0, 0);
    printf("%d\n", ans);
    return 0;
}

但这代码交上去有5个数据点T了,所以还是得想其他的办法,比如DP。 

二维DP

一开始设计了一个三维的状态,f[i][j][k]表示到第i头牛,智商和为j,情商和为k时的情商与智商和

但这数组有点太大了...

考虑到j,k两维的下标其实与数组值有一定关系,所以我们优化掉第三维,把状态改成f[i][j]表示到第i头牛,智商和为j时的情商和

又考虑到,智商和、情商和可能取到负数,为了保证数组下标的合法性,我们对数组下标整体进行了偏移

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

#define maxn 405
#define maxm 2005

int iq[maxn], eq[maxn];
int ans, n;
int dp[maxn][maxm * maxn];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d %d", &iq[i], &eq[i]);
	}

	memset(dp, -0x3f, sizeof(dp));
	dp[0][400000] = 0;


	for (int i = 1; i <= n; i++) {
        //合理调整dp边界
		if (iq[i] >= 0) {
			for (int j = iq[i]; j <= 800000; j++) {
				//for (int j = 800000; j >= iq[i]; j--) {
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - iq[i]] + eq[i]);
				//printf("dp[%d][%d]:%d\n", i, j, dp[i][j]);
			}
		} else {
			for (int j = 0; j <= 800000 + iq[i]; j++) {
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - iq[i]] + eq[i]);
				//printf("dp[%d][%d]:%d\n", i, j, dp[i][j]);
			}
		}
	}


	for (int j = 400000; j <= 800000; j++) {//智商和不能为负
		//printf("%d\n", dp[n][j] + j - 400000);
		if (dp[n][j] > 0)//情商和不能为负
			ans = max(ans, dp[n][j] + j - 400000);
	}


	printf("%d\n", ans);

	return 0;
}

 一些细节:

  • dp数组初始化成很小的数而非0,因为情商和有可能取负数
  • dp[0][400000]=0,偏移后的数组400000相当于零坐标,是合法状态
  • dp边界的处理
  • 找答案时的处理,且注意答案对应的是dp[n][j]+j,再减去总体偏移量400000

但MLE..

正解

一维DP

利用滚动数组优化

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

#define maxn 405
#define maxm 2005

int iq[maxn], eq[maxn];
int ans, n;
int dp[maxm * maxn];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d %d", &iq[i], &eq[i]);
	}

	memset(dp, -0x3f, sizeof(dp));
	dp[400000] = 0;


	for (int i = 1; i <= n; i++) {
		if (iq[i] >= 0) {

			for (int j = 800000; j >= iq[i]; j--) {
				dp[j] = max(dp[j], dp[j - iq[i]] + eq[i]);
				//printf("dp[%d][%d]:%d\n", i, j, dp[i][j]);
			}
		} else {
			for (int j = 0; j <= 800000 + iq[i]; j++) {
				dp[j] = max(dp[j], dp[j - iq[i]] + eq[i]);
				//printf("dp[%d][%d]:%d\n", i, j, dp[i][j]);
			}
		}
	}


	for (int j = 400000; j <= 800000; j++) {
		//printf("%d\n", dp[n][j] + j - 400000);
		if (dp[j] > 0)
			ans = max(ans, dp[j] + j - 400000);
	}


	printf("%d\n", ans);

	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++系统编程篇——Linux初识(系统安装、权限管理,权限设置)

(1)linux系统的安装 双系统---不推荐虚拟机centos镜像&#xff08;可以使用&#xff09;云服务器/轻量级云服务器&#xff08;强烈推荐&#xff09; ①云服务器&#xff08;用xshell连接&#xff09; ssh root公网IP 然后输入password ①添加用户&#xff1a; addus…

企业研发必备网络:这些关键特性,你get了吗?

对于以研发为核心的企业&#xff0c;如软件开发、生物制药、智能汽车等&#xff0c;安全、稳定的研发网络可是他们业务发展不可或缺的。那么&#xff0c;这些研发网络究竟有哪些独特之处&#xff0c;又能为企业带来哪些价值呢&#xff1f; 首先&#xff0c;我们知道企业研发常常…

【设计模式】JAVA Design Patterns——Adapter(适配器模式)

&#x1f50d;目的 将一个接口转换成另一个客户所期望的接口。适配器让那些本来因为接口不兼容的类可以合作无间。 &#x1f50d;解释 现实世界例子 考虑有这么一种情况&#xff0c;在你的存储卡中有一些照片&#xff0c;你想将其传到你的电脑中。为了传送数据&#xff0c;你需…

【管理咨询宝藏104】普华永道财务管理与内控培训

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏104】普华永道财务管理与内控培训 【格式】PDF版本 【关键词】普华永道、四大、财务管理 【核心观点】 - 职能转变后&#xff0c;财务在决策支持…

「前端」性能优化问题总结

前言 本文主要介绍一些前端通用的性能优化方案总结&#xff0c;非写代码阶段的性能优化。 分包 React router V6.4 数据路由新特性 <Route path/xx lazy{async()>{const module await import(./xx)const XX module.defaultreturn{element:(<Suspense fallback…

紫光展锐先进技术科普 | 工业互联网遇到5G,1+1>2?

随着工厂自动化的加速普及&#xff0c;如今我们可能经常看到这样的场景&#xff1a;在高温、潮湿、粉尘、腐蚀等恶劣环境作业场景&#xff0c;巡检机器人穿梭其中&#xff0c;工人们不必弯腰去搬沉重又危险的器件&#xff0c;而旁边会有一个个机械臂帮手平稳有序地完成好所有搬…

HTTP客户端手动解析响应体数据

服务端 package mainimport ("easyGo/person""encoding/json""net/http" )func main() {http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {p : &person.Person{Name: "jackie",Age: 30,T: pe…

【JAVA进阶篇教学】第十六篇:Java中AOP使用

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十五篇&#xff1a;Java中AOP使用。 AOP&#xff08;Aspect-Oriented Programming&#xff09;是一种编程范式&#xff0c;它允许开发者在不修改源代码的情况下&#xff0c;对代码进行横切关注点的分离和增强。在 Java…

Linux上安装python指南

公司的linux服务器上只有自带的python2,折腾了一下安装python3,后来在网上搜发现装miniconda会更加方便。 1、 下载miniconda安装包 清华镜像下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 点这里下载 2、 上传Linux安装 #安装在/usr/local/mini…

Spring AI默认gpt版本源码探究

Spring AI默认gpt版本源码探究 调试代码 通过调试&#xff0c;可以看到默认mdel为gpt-3.5-turbo 源码探究 进入OpenAiChatClient类查看具体的代码信息 可以看到如下代码&#xff0c;在有参构造方法中可以看到&#xff0c;model默认使用OpenAiApi.DEFAULT_CHAT_MODELpublic…

离子风机:静电防护的得力助手

在现代工业生产中&#xff0c;静电问题一直是困扰许多企业的难题。尤其是在电子生产线、维修台等敏感区域&#xff0c;静电的存在可能对产品质量造成严重影响&#xff0c;甚至导致设备损坏。为了解决这一问题&#xff0c;离子风机作为静电防护的得力助手&#xff0c;正逐渐受到…

制造企业数据管理:从数据到价值的转化

在数字化浪潮席卷全球的今天&#xff0c;制造企业面临着前所未有的机遇与挑战。如何从海量的数据中提取有价值的信息&#xff0c;将其转化为企业的核心竞争力&#xff0c;成为了每一个制造企业必须面对的问题。而数据管理&#xff0c;正是实现这一转化的关键所在。制造企业数据…

第01章 互联网的概述(发展历史+接入方法+应用)

1.1 本章目标 了解互联网发展的历史熟悉互联网的接入方式了解互联网的典型应用 1.2 互联网发展的历史(产生过程、发展过程) 1.2.1 互联网的起源与发展 1.2.2 互联网在中国的发展 1.3 互联网的接入

【虚拟仿真】Unity3D中实现对大疆无人机遥控器手柄按键响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近项目中需要用到大疆无人机遥控器对程序中无人机进行控制,遥控器是下图这一款: 博主发…

Django创建网站的地基

相关文档 1、为新网站创建一个文件夹&#xff08;这里是&#xff1a;locallibrary&#xff09; D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

网工路由基础——动态路由协议(RIP)

一、动态路由协议的分类 1.按工作区域分类&#xff1a; 动态路由协议按用途分类可以分为内部网关协议&#xff08;IGP&#xff09;和外部网关协议&#xff08;EGP&#xff09;。一个Internet网可以被分成多个域或多个自治系统&#xff0c;各自治系统通过一个核心路由器…

深入学习Linux内核之v4l2应用编程(二)

一&#xff0c;用户空间访问v4l2设备步骤 V4L2&#xff08;Video for Linux 2&#xff09;是Linux中关于视频设备的内核驱动&#xff0c;它使得Linux系统能够支持视频设备&#xff0c;如摄像头。对于Camera V4L2的应用编程&#xff0c;一般遵循以下步骤&#xff1a; 1&#x…

PADS:生成自交叉平面区域

根据板外形铺铜方法&#xff1a; pads根据板外形铺铜_铺铜如何根据板子形状改变-CSDN博客 根据板外形创建平面区域出现问题&#xff1a; 解决方法&#xff1a;去找结构&#xff0c;让他把出图之前把线合并了

上海市虹桥祥源希尔顿酒店屋顶气膜网球馆

上海市虹桥祥源希尔顿酒店屋顶气膜网球馆为高端酒店设施增添了现代化、环保的运动场所。这座网球馆不仅为酒店住客提供了一个全天候、舒适的运动空间&#xff0c;也为虹桥地区的居民带来了全新的健身体验。作为轻空间&#xff08;江苏&#xff09;膜科技有限公司&#xff08;以…

潮玩与游戏的结合点——潮玩宇宙App与链游

本文主要介绍了潮玩宇宙App的开发过程及其链游的开发&#xff0c;探讨了潮玩与游戏的结合点&#xff0c;分析了其市场前景和潜在风险&#xff0c;并提出了相应的建议。 一、潮玩宇宙App的开发背景 随着互联网的普及和人们对娱乐方式的多样化需求&#xff0c;潮玩市场逐渐崛起…