动态规划学习——赢得最大数

题目:

给一个数组,表示纸牌,每张纸牌有一定的大小
两个人依次选择左边或者右边的纸牌,获得相应的点数
最后点数较大的为胜者
注:两个人都是聪明人,意味着拿牌会选择让自己获得更多的,让对方获得更少的选择

代码如下:

//给一个数组,表示纸牌,每张纸牌有一定的大小
//两个人依次选择左边或者右边的纸牌,获得相应的点数
//最后点数较大的为胜者
//注:两个人都是聪明人,意味着拿牌会选择让自己获得更多的,让对方获得更少的选择
#include<iostream>
#include<algorithm>
using namespace std;
int arr[10000];
int N;
int first1(int L,int R);
int second1(int L,int R);
int first2(int L,int R);
int second2(int L,int R);
int ways2_first[10000][10000];
int ways2_second[10000][10000];
int ways3_first[10000][10000];
int ways3_second[10000][10000];//法一:直接递归
int ways1()
{int first=first1(0,N-1);int second=second1(0,N-1);return max(first,second);
}//先手函数
//先手有两个选择,一是拿左边的纸牌,则其点数为arr[L]+second1(L+1,R);二是拿右边的牌,则其点数为arr[R]+second1(L,R-1)
//而最终的选择是让自己的点数尽可能大,所以用max求最大值
int first1(int L,int R)
{if(L==R) return arr[L];else{int t1=arr[L]+second1(L+1,R);int t2=arr[R]+second1(L,R-1);return max(t1,t2);}
}
//后手函数
//后手只能等待对方拿纸牌,而对方可以拿左边也可以拿右边的,最终对方要让后手拿到的点数尽可能小,所以用min函数求最小值
int second1(int L,int R)
{if(L==R) return 0;else{int t1=first1(L+1,R);int t2=first1(L,R-1);return min(t1,t2);} 
}//法二:带有缓存的递归
int ways2()
{//初始化int i,j;for(i=0;i<=N;i++)for(j=0;j<=N;j++){ //注意这里不要掉了括号,因为这个调试了半天ways2_first[i][j]=-1;ways2_second[i][j]=-1;}int first=first2(0,N-1);int second=second2(0,N-1);return max(first,second);
}int first2(int L,int R)
{int ans=0;if(ways2_first[L][R]!=-1) return ways2_first[L][R];else{if(L==R) ans=arr[L];else{int t1=arr[L]+second2(L+1,R);int t2=arr[R]+second2(L,R-1);ans=max(t1,t2);}ways2_first[L][R]=ans;}return ans;
}int second2(int L,int R)
{int ans=0;if(ways2_second[L][R]!=-1) return ways2_second[L][R];else{if(L==R) ans=0;else{int t1=first2(L+1,R);int t2=first2(L,R-1);ans=min(t1,t2);}ways2_second[L][R]=ans;}return ans;
}//法三:动态规划
int ways3()
{int i;for(i=0;i<N;i++){ways3_first[i][i]=arr[i];ways3_second[i][i]=0;}for(int startcol=1;startcol<N;startcol++){ int L=0;int R=startcol;while(R<N){ways3_first[L][R]=max(arr[R]+ways3_second[L][R-1],arr[L]+ways3_second[L+1][R]);ways3_second[L][R]=min(ways3_first[L][R-1],ways3_first[L+1][R]);L++;R++;}}return max(ways3_first[0][N-1],ways3_second[0][N-1]);
}int main()
{int choice=0;do{cout<<"请输入数组长度:"<<endl;cin>>N;int i=0;cout<<"请输入数组中每个数的值"<<endl;for(i=0;i<N;i++) cin>>arr[i];int result1=ways1();cout<<"法一 直接递归 的结果为 "<<result1<<endl;int result2=ways2();cout<<"法二 缓存递归 的结果为 "<<result2<<endl;int result3=ways3();cout<<"法三 动态规划 的结果为 "<<result3<<endl;cout<<"继续请输入1"<<endl;cin>>choice;}while(choice==1);return 0;
}

参考资料:

bilibili 马士兵教育——左程云

【应B友要求火速上线!算法大神(左程云)教你从暴力递归到动态规划,吊打所有暴力递归、动态规划问题】https://www.bilibili.com/video/BV1ET4y1U7T6?p=13&vd_source=4e9b7dd8105df854ae96830c97920252

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

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

相关文章

小土堆pytorch学习笔记001

1、Pytorch环境的配置与安装。 &#xff08;1&#xff09;建议安装&#xff1a;Anaconda &#xff08;2&#xff09;检查显卡&#xff1a;GPU &#xff08;3&#xff09;管理环境&#xff08;不同版本的pytorch 版本不同&#xff09;&#xff1a; conda create -n pytorch…

Android单元测试(五):网络接口测试

温馨提示&#xff1a;如果你不太熟悉单元测试&#xff0c;可以先看下之前四篇基础框架使用。便于你更好的理解下面的内容。 在平日的开发中&#xff0c;我们用后台写好给我们接口去获取数据。虽然我们有一些请求接口的工具&#xff0c;可以快速的拿到返回数据。但是在一些异常情…

xxe漏洞之scms靶场漏洞

xxe-scms 代码审核 &#xff08;1&#xff09;全局搜索simplexml_load_string simplexml_load_string--将XML字符串解释为对象 &#xff08;2&#xff09;查看源代码 ID1 $GLOBALS[HTTP_RAW_POST_DATA]就相当于file_get_contents("php://input"); 因此这里就存…

Java面试题之基础篇

文章目录 一&#xff1a;谈谈你对面向对象的理解二&#xff1a;JDK、JRE、JVM三者区别和联系三&#xff1a;和equals比较四&#xff1a;hashCode与equals五&#xff1a;final六&#xff1a;String、StringBuffer、StringBuilder七&#xff1a;重载与重写的区别&#xff1f;八&a…

RSI的c#计算,同花顺

同花顺的RSI是移动平滑计算&#xff0c;折腾我半天了。为了算当前值&#xff0c;一定要把前面的值记下来。真麻烦 ///LC : REF(CLOSE,1); /// 当日上涨平均数 前一日涨幅平均数*5/6 当日涨幅/6 &#xff08;若某日下跌时&#xff0c;则当日涨幅记为0&#xff09; …

慎用“from pwn import *”!和re库findall方法重名引发的问题

今天搓一个sage脚本遇到一个很无语的问题&#xff0c;经过调试&#xff0c;发现是pwntools库中的findall方法和re库中的findall方法重名导致的。这两个findall方法的用法完全不一样&#xff0c;稍有不慎就会踩坑。 文章目录 区分问题引发如何规避 区分 re 是 Python 中用于处理…

算法设计与分析实验1:利用减治法和分治法来处理同一个问题

目录 实验1 利用减治法和分治法来处理同一个问题 一、实验目的 二、实验内容和要求 【俄式乘法函数原型及功能说明】 【核心函数实现代码及时间复杂度与空间复杂度分析】 (1)俄式乘法实现代码 (2)时间复杂度:O(log(底数为2)n) (3)空间复杂度:无递归算法,为…

【unity】unity中如何随机选取list中的对象

【背景】 有一组Prefab,在游戏中希望随机Spawn实例。 【代码示例】 在脚本中创建一个List,在Unity编辑器中将需要生成的待选Prefab放入List中。通过随机Index来随机获取List元素实现目标。 using UnityEngine; using System.Collections.Generic;public class RandomSele…

mockjs使用(2)

mockjs使用&#xff08;1&#xff09; 4、Mock 4.1 Mock.mock() 根据数据模版生成模拟数据 Mock.mock( rurl?, rtype?, template|function(options) )问号代表该参数不必填 4.1.1 各参数及其默认值 rurl: 不必填。表示需要拦截的URL&#xff0c;可以使URL字符串或URL正…

Java-SPI机制

SPI基本概念 SPI&#xff08;Service Provider Interface&#xff09;是一种服务发现机制&#xff0c;为某个接口寻找服务实现的机制。这有点类似 IoC 的思想&#xff0c;将装配的控制权移交到了程序之外。SPI 将服务接口和具体的服务实现分离开来&#xff0c;将服务调用方和服…

Linux 强大的网络命令:nc命令操作方法

Netcat&#xff08;或简称nc&#xff09;是一个强大的网络工具&#xff0c;它在Linux系统中广泛使用&#xff0c;可用于创建各种网络连接。它被描述为"网络的瑞士军刀"&#xff0c;因为它的功能非常灵活&#xff0c;可以在网络中执行多种任务。 在大多数Linux发行版中…

【笔记】Helm-3 主题-14 Helm版本支持策略

Helm版本支持策略 该文档描述了在Helm和Kubernetes之间的最大版本偏差。 支持的版本 Helm的版本用x.y.z描述&#xff0c;x是主版本&#xff0c;y是次版本&#xff0c;z是补丁版本&#xff0c;遵循 语义化版本 术语。 Semantic Versioning 2.0.0 | Semantic Versioning Helm项…

flutter 中使用flutter_slidable 实现左滑显示删除、修改菜单,仿微信

flutter pub add flutter_slidable导入 import package:flutter_slidable/flutter_slidable.dart;使用 import package:flutter/material.dart; import package:flutter_slidable/flutter_slidable.dart;void main() > runApp(const MyApp());class MyApp extends Statele…

速锐得解码匹配吉利枫叶80V/60S远程控制汽车应用B端市场

吉利枫叶80V/60S这两款车平时是不多见的&#xff0c;因为吉利枫叶的定位就的B端市场&#xff0c;包括了公务用车、共享出行、网约车、大客户定制&#xff0c;所以&#xff0c;好风凭借力&#xff0c;送我上青云&#xff0c;吉利在默默地发着一笔小财&#xff0c;或者说拓宽了更…

Go 复合数据类型

1. 数组&#xff08;array&#xff09;&#xff08;OK&#xff09; 数组数组的概念数组是具有固定长度且拥有零个或多个相同数据类型元素的序列 i. 元素的数据类型相同 ii. 长度固定的序列 iii. 零个或多个元素的序列 与 slice 对比 由于数组的长度固定&#xff0c;所以在 G…

2023年春秋杯网络安全联赛冬季赛 Writeup

文章目录 Webezezez_phppicup Misc谁偷吃了外卖modules明文混淆 Pwnnmanagerbook Reupx2023 CryptoCF is Crypto Faker 挑战题勒索流量Ezdede 可信计算 Web ezezez_php 反序列化打redis主从复制RCE&#xff1a;https://www.cnblogs.com/xiaozi/p/13089906.html <?php c…

教育大模型浪潮中,松鼠Ai的“智适应”故事好讲吗?

“计算机对于学校和教育产生的影响&#xff0c;远低于预期&#xff0c;要改变这一点&#xff0c;计算机和移动设备必须致力于提供更多个性化的课程&#xff0c;并提供有启发性的反馈。” 这是2011年5月份乔布斯与比尔盖茨最后一次会面时的记录&#xff0c;当时的电脑还十分落后…

SpringMVC第三天(RESTful)

REST风格 REST简介 REST(Representational State Transfer)&#xff0c;表现形式状态转换 传统风格资源描述形式 http://localhost/user/getById?id1 http://localhost/user/saveUser REST风格描述形式 http://localhost/user/1 http://localhost/user 优点&#xff1a; 隐…

漏洞扫描服务可以检测出哪些安全问题?

漏洞扫描服务是一种用于检测和识别计算机系统、网络和应用程序中潜在安全漏洞的服务。通过漏洞扫描&#xff0c;可以发现并修复各种类型的漏洞&#xff0c;从而提高系统的安全性。本文将介绍漏洞扫描服务可以检测出的安全问题。一、网络架构安全问题 网络架构是计算机系统的核心…