快速链接

  • 原题链接
  • 题目大意
  • 输入格式
  • 输出格式
  • 数据范围
  • 解题思路
  • 上代码

原题链接

SSL1653 外网进不去

题目大意

给出一行数字a1,a2,a3,⋯,ana_1,a_2,a_3,\cdots,a_na1​,a2​,a3​,⋯,an​,然后给你mmm个回合的机会,每回合你可以从中选择一个数字擦去它,接着剩下来的每个数字aia_iai​都要递减一个值bib_ibi​。如此重复mmm个回合,所有你擦去的数字之和就是你所得的分数,求你可以获得的最大的分数是多少。

输入格式

输入文件的第一行是一个整数nnn,表示数字个数。
第二行一个整数mmm,表示回合数。
接下来一行有nnn个数,a1,a2,a3,⋯,ana_1,a_2,a_3,\cdots,a_na1​,a2​,a3​,⋯,an​表示原始序列。
最后一行有nnn个不超过500500500的数,b1,b2,b3,⋯,bnb_1,b_2,b_3,\cdots,b_nb1​,b2​,b3​,⋯,bn​,表示每回合每个数字递减的值。

输出格式

输出文件只有一个整数,表示最大的可能得分。

Sample\mathbf{Sample}Sample Input\mathbf{Input}Input

3
3
10 20 30
4 5 6

Sample\mathbf{Sample}Sample Output\mathbf{Output}Output

47

Hint&Explain\mathbf{Hint\&Explain}Hint&Explain
第一次取30,此时分数为30,剩下两个数为8 15
第二次取15,此时分数为45,剩下一个数为2
第三次取2,此时分数为47,没有剩下的数。
总分数为47

数据范围

对于100%100\%100%的数据满足:1≤M≤N≤2000,1≤ai≤10000,1≤bi≤5001≤M≤N≤2000,1\le a_i\le 10000,1\le b_i\le 5001≤M≤N≤2000,1≤ai​≤10000,1≤bi​≤500。

解题思路

dpdpdp,还是dpdpdp。
先从简单的情况为切入点,即n=mn=mn=m,那么全部数字都要取完,所以我们只要先按照bib_ibi​从小到大的顺序排序,就能在Θ(n)\Theta(n)Θ(n)的时间内得到问题的答案。
如果问题进一步升级,即原题的要求,nnn可以不等于mmm,那我们该怎么做呢?
在前一个问题的做法中,我们可以设fif_ifi​为前iii个数字可以得到的最大价值,从而得到答案。而在本题中,可以加一个维度jjj,代表前jjj轮可以得到的最大价值,那么fi,jf_{i,j}fi,j​就代表前iii个数字在前jjj轮可以得到的最大价值。由第一个问题的动态转移方程可以推出本题的动态转移方程:
fi,j={0j=0max⁡(fi−1,j,fi−1,j−1+ai−bi×(j−1))1≤j≤if_{i,j}=\begin{cases} 0 & j=0 \\ \max(f_{i-1,j},f_{i-1,j-1}+a_i-b_i\times(j-1)) & 1\le j\le i \end{cases} fi,j​={0max(fi−1,j​,fi−1,j−1​+ai​−bi​×(j−1))​j=01≤j≤i​
第一个式子为什么都不选的情况。
第二个式子中第一项为当前不擦该选项,第二项为擦除该选项。由于轮数的原因,在擦除时要减去之前每一轮都要减去的bib_ibi​的叠加,即bi×(j−1)b_i\times(j-1)bi​×(j−1)。

注意:

1.由于在轮数一轮轮过去,数字可能变成负数,所以要把fff里面的所有值赋值为一个极小数,如-0x7f7f7f7f
2.要在执行动态转移方程前把每一项按照bib_ibi​从大到小的顺序排序。


最后,祝大家早日

上代码

#include<algorithm>
#include<iostream>
#include<cstring>using namespace std;struct obj{obj(int a=0,int b=0):val(a),del(b){}int val,del;
};obj               a[3010];
int               f[3010][3010];
int               n,m;inline bool pd(obj x,obj y)
{return x.del>y.del;
}int main()
{cin>>n>>m;for(int i=1; i<=n; i++)cin>>a[i].val;for(int i=1; i<=n; i++)cin>>a[i].del;sort(&a[1],&a[n+1],pd);memset(f,-0x7f,sizeof(f));for(int i=1; i<=n; i++){f[i-1][0]=0;for(int j=1; j<=min(i,m); j++)f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i].val-(a[i].del*(j-1)));}cout<<f[n][m]<<endl;return 0;
}

完美切题∼\sim∼

SSL1653 数字游戏相关推荐

  1. 用法 stl_51Nod 2160 数字游戏 STL基本用法

    目录 目录 1. 题目描述 1.1. Limit 1.2. Problem Description 1.3. Input 1.4. Output 1.5. Sample Input 1.6. Samp ...

  2. [蓝桥杯]PREV-23.历届试题_数字游戏

    问题描述栋栋正在和同学们玩一个数字游戏.游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要说下一个数字2.再下面的一个同学要从上一个同学说的数字往 ...

  3. C语言经典小游戏---猜数字游戏 (包含C语言中如何实现随机数的生成)

    题目描述:输入1-100之间的数字,进行猜数字游戏,猜大猜小有提示,直至才对为止,游戏可以重复游玩. 算法思路: 1.用void函数分别写出菜单程序与游戏进程程序. 2.用switch-case-de ...

  4. 例题3-4 猜数字游戏的提示(Master-Mind Hints, UVa 340)

    实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n ...

  5. c语言猜数字游戏用while,【C语言基础】有趣的猜数字游戏。(while循环,if语句,switch语句)...

    要求:猜数字游戏的实现.代码如下:#include #include #include void menu() { printf("***************************** ...

  6. python猜年龄代码_python入门教程NO.7用python来写一个猜数字游戏

    python入门教程 本文涉及的python基础语法为while循环 #python#3中while语句常常被用于循环执行某个程序,任何非0和非空null的值,都会被条件判断为True while 条 ...

  7. Go-实现猜数字游戏代码

    实现猜数字游戏代码 1 package main 2 3 import ( 4 "fmt" 5 "math/rand" 6 "time" 7 ...

  8. 挣值管理不是搞数字游戏

    摘要: 要考PMP(Project Management Professional ),挣值管理是必考的知识.软件项目有很大的特殊性,不少人认为挣值管理不太适用于软件项目.挣值管理相关资料也比较超多, ...

  9. python猜数字游戏简单-python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

  10. python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏

    前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)&q ...

最新文章

  1. Facebook AI新研究:可解释神经元或许会阻碍DNN的学习
  2. 3 年血亏 10 亿美元,Google Deepmind 出了什么问题?
  3. Unity3D之主菜单
  4. awk对某个字段分割处理
  5. java记事本技术参数_[源码和文档分享]基于JAVA的记事本
  6. 【MFC系列-第13天】Windows系统对话框(对话框记事本逻辑)
  7. 架构之路(八)从CurrentUser说起
  8. AI学习笔记(十)卷积神经网络
  9. 《强化学习》中的第11章:基于函数逼近的离轨策略方法
  10. Python 编程训练(3)
  11. Springboot之GetMapping参数
  12. 恒定湿热试验条件及标准-环境试验中的湿热试验报告
  13. tensorflow-ckpt2npy
  14. 2022年备考[嵌入式系统设计师]你准备好了吗?
  15. stackoverflow 瞎眼 模式,你中招了么?
  16. 年薪200万是怎样的一种体验?
  17. 制造业OEER语言数据挖掘之相关性分析
  18. 我的Redis哨兵为什么不切换?
  19. 2021-2-18:请你说说MySQL的字符集与排序规则对开发有哪些影响?
  20. iOS音频系列(一)--音频基础

热门文章

  1. 东南计算机专硕和学硕,问了200个学长学姐,终于知道专硕学硕的“差别”
  2. word给大括号公式加编号
  3. 关于NTFS数据流ADS的详细介绍
  4. layui 小卡片_如何评价LayUI和他的作者贤心?
  5. Ruby / Rails代码气味基础01
  6. 电脑重启桌面 计算机图标消失,电脑重启后计算机图标不见了怎么办
  7. 计算机组成原理下列数中最小的数位,计算机组成原理试题(四)
  8. Android集成阿里热修复(Hotfix)
  9. android 阿里hotfix,Android 热修复方案--阿里百川HotFix
  10. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 10 周:编辑你的句子