题解 SP5271 XOINC - A Coin Game
双倍经验:P2964 [USACO09NOV]硬币的游戏A Coin Game
O3做法(TLE):枚举i,j,k,即剩下i枚金币,上一轮选了j枚金币,这一轮选k(1<=k<=j * 2)枚金币。
O2做法 1:容易发现,对于【j-1】,k枚举范围为1~2j-2;对于【j】,k的范围只增加了2j-1,2j两项,可以枚举i,j,再由【j-1】的状态继续判断2j-1,2j两项(sum为前缀和)
#include<bits/stdc++.h>
using namespace std;
int n,sum[2001],c[2001],dp[2001][2001];
int main()
{
cin>>n;
for(int i=n;i>=1;i--)cin>>c[i];//为了处理方便,我们直接逆序输入(编号自底向上)
for(int i=1;i<=n;i++)sum[i]+=sum[i-1]+c[i];//获取前缀和
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i][j-1];//重合部分
int k=2*j-1;
if(k<=i)dp[i][j]=max(dp[i][j],sum[i]-dp[i-k][k]);//新增状态
k+=1;
if(k<=i)dp[i][j]=max(dp[i][j],sum[i]-dp[i-k][k]);//新增状态
}
cout<<dp[n][1]<<endl;
return 0;
}
O2做法 2:剩下第i枚金币,本次最多在其中取j个,要么由最多取j-1枚的状态转移,要么取j个,则下一轮最多取min(i-j,j<<1)枚
#include<cstdio>
#include<iostream>
using namespace std;
int n,s[2001],f[2001][2001];
int main() {
scanf("%d",&n);
for (int i=n; i; i--) scanf("%d",&s[i]);//倒序输入
for (int i=2; i<=n; i++) s[i]+=s[i-1];
for (int i=1; i<=n; i++)
for (int j=1; j<=i; j++)//本次取的个数不超过剩下的个数
f[i][j]=max(f[i][j-1],s[i]-f[i-j][min(i-j,j<<1)]);
printf("%d",f[n][2]);
}
题解 SP5271 XOINC - A Coin Game的更多相关文章
- 【题解】[USACO09NOV]A Coin Game S
Link \(\text{Solution:}\) 菜鸡自己想出来了状态设计,但是没有实现出来--菜死了 设\(dp[i][j]\)表示该选第\(i\)个,最多选\(j\)个的最优解.注意这里的定义仅 ...
- 题解报告:hdu 2069 Coin Change(暴力orDP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...
- 【题解】284E. Coin Troubles(dp+图论建模)
[题解]284E. Coin Troubles(dp+图论建模) 题意就是要你跑一个完全背包,但是要求背包的方案中有个数相对大小的限制 考虑一个\(c_i<c_j\)的限制,就是一个\(c_i\ ...
- 题解 UVA10328 【Coin Toss】
这道题目其实就是说有N张纸牌,问至少连续K张正面朝上的可能性是多少. 可以用递推做.首先我们将题目所求从 至少K张 转化为 总数 - 至多K张 (为什么要这样自己想) 设F[i][j]为前i个纸牌至多 ...
- 【题解】coin HDU2884 多重背包
题目 Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- [luogu2964][USACO09NOV][硬币的游戏A Coin Game] (博弈+动态规划)
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
- TZOJ 2965 A Coin Game(DP)
描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game cal ...
- 洛谷P2964 [USACO09NOV]硬币的游戏A Coin Game
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
- LeetCode Coin Change
原题链接在这里:https://leetcode.com/problems/coin-change/ 题目: You are given coins of different denomination ...
随机推荐
- Java定时任务之Timer
Timer是Java中实现定时任务的方式之一,下面是一个简单的例子: import java.util.Timer; import java.util.TimerTask; public class ...
- HTTP 协议的 8 种请求类型介绍
HTTP 协议的 8 种请求类型介绍 HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下: OPTIONS:返回服务器针对特定资源所 ...
- 【vue 权威指南】 学习笔记 一
内容简介 vue.js 是一个用来开发Web界面的前端库. 1.vue.js 是什么 vue.js 是一个构建数据驱动的web界面的库,vue.js 通过简单的API提供高效的数据绑定和灵活的组件系统 ...
- Gauss消元模板
; //高斯消元模板 //----------------------------------------------------------------------------------- //把 ...
- nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错
正常nginx配置了SSL是可以通过HTTPS访问后端的,但是对有配置SNI + https后端的支持有点麻烦. 编译安装nginx后,看一下是否支持SNI /usr/local/nginx/sbin ...
- 安装 centos8.1
阿里云镜像下载链接 http://mirrors.aliyun.com/centos/8.1.1911/isos/x86_64/ 选择 CentOS-8.1.1911-x86_64-dvd1.iso ...
- 【安卓开发】Webview简单使用
什么是WebView? 答:Android内置webkit内核的高性能浏览器,而WebView则是在这个基础上进行封装后的一个 控件,WebView直译网页视图,我们可以简单的看作一个可以嵌套到界面上 ...
- Spring的代理模式(静态,JDK,CGLIB)
一.静态代理 1.定义业务接口 public interface Subject { void doSomeThing(); } 2.真实业务类实现接口 public class RealSu ...
- SpringBoot整合WEB开发--(五)自定义错误页
目的与原理: 处理异常时,若我们想根据实际情况返回不同的页面,@ControllerAdvice与@ExceptionHandler,一般用于处理应用级别的异常,一些容器级别的错误就处理不了,例如Fi ...
- Controller 和 Action -1
https://www.cnblogs.com/willick/p/3331521.html MVC 的每个请求都会提交到 Controller 处理.Controller 包含了对请求的逻辑处理,能 ...