1221. 数字游戏
解题思路:
题目有个地方,我理解错了,导致WA很多次,问题是当你擦除a[i]时,你要将它对应的b[i]去减剩余的序列,之前一直以为第i轮就减去b[i],ORZ。
简单的动态,dp[i]表示去到第i轮时的最大擦出和。
按照我们直观的思路,肯定是最大消费的(也就是b[i]比较大的)应该先拿掉,因此我们先按照cost排序。
dp[j] = min{dp[j-1] + nodes[i].v - nodes[i].cost*(j-1)};
源码如下:
/*
* main.cpp
*
* Created on: Sep 23, 2011
* Author: raphealguo
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MAXL 210
struct Node{
int value;
int cost;
};
bool cmp(Node a, Node b){
return a.cost > b.cost;
}
int main(){
int n, m;
Node nodes[MAXL];
int i, j;
int dp[MAXL];
while (scanf("%d %d", &n, &m) != EOF){
memset(nodes, 0, sizeof(nodes));
memset(dp, 0, sizeof(dp));
for (i = 0; i < n; ++i){
scanf("%d", &nodes[i].value);
}
for (i = 0; i < n; ++i){
scanf("%d", &nodes[i].cost);
}
sort(nodes, nodes+n, cmp);
for (i = 0; i < n; ++i){
for (j = m; j >= 1; --j){
if (dp[j] < dp[j-1] + nodes[i].value - nodes[i].cost*(j-1)){
dp[j] = dp[j-1] + nodes[i].value - nodes[i].cost*(j-1);
}
}
}
printf("%d\n", dp[m]);
}
}
附带原题:
1221. 数字游戏
Description
小
W
发明了一个游戏,他在黑板上写出了一行数字
a1,a2,….an
,然后给你
m
个回合的机会,每回合你可以从中选择一个数擦去它,接着剩下来的每个数字
ai
都要递减一个值
bi
。如此重复
m
个回合,所有你擦去的数字之和就是你所得到的分数。
小
W
和他的好朋友小
Y
玩了这个游戏,可是他发现,对于每个给出的
an
和
bn
序列,小
Y
的得分总是比他高,所以他就很不服气。于是他想让你帮他算算,对于每个
an
和
bn
序列,可以得到的最大得分是多少。这样他就知道有没有可能超过小
Y
的得分。
Input
第一行,一个整数
n
(
1<=n<=200
),表示数字的个数。
第二行,一个整数
m
(
1<=m<=n
),表示回合数。
接下来一行有
n
个不超过
10000
的正整数,
a1,a2…an
,表示原始数字
最后一行有
n
个不超过
500
的正整数,
b1,b2….bn
,表示每回合每个数字递减的值
Output
一个整数,表示最大可能的得分
Sample Input
3
3
10 20 30
4 5 6
Sample Output
47
Problem Source
ZSUACM Team Member
分享到:
相关推荐
在 sicily 上的题目,通常会涉及到排序、搜索、图论、动态规划、贪心算法、回溯算法等经典算法。每种算法都有其特定的应用场景和优缺点,理解并掌握它们是成为一名优秀程序员的关键。 1. **排序算法**:如快速排序...
5. **Poor contestant Prob**:题目名称暗示可能是一个概率问题,需要理解概率理论和随机过程,可能涉及到动态规划或蒙特卡洛模拟来求解。 6. **MJ, Nowhere to Hide**:可能是一个搜索或图遍历问题,比如深度优先...
这些题目可能涵盖了不同的难度等级和数据结构应用,如排序、搜索、图论、动态规划等。 标签 "1876 sicily_1022 sicily_1934 sicily_soj_ip" 进一步强调了问题的编号和主题。这里 "IP" 可能指的是 "Interactive ...
算法方面,排序(如冒泡排序、快速排序、归并排序)和查找(如二分查找、哈希查找)是基础,而动态规划、贪心算法、回溯法等更高级的策略则常常出现在复杂的竞赛题目中。 "C++ for sicily.doc"文档可能涵盖了这些...
2. **算法和数据结构**:查找并学习使用的算法和数据结构,如排序、搜索、图论、动态规划等。 3. **编程语言特性**:根据源代码的语言,学习和熟悉特定语言的语法和最佳实践。 4. **设计模式**:识别和理解代码中...
中大sicily online judge的刷题指南,里面介绍得很详细,不过,最近sicily好像不能外网访问了。
3. **算法与数据结构**:参考代码中很可能包含了各种算法实现,如排序、搜索、图论、动态规划等。数据结构如数组、链表、树、图、哈希表等也可能是重点。理解这些算法和数据结构的原理及其应用是提升编程能力的关键...
sicily 1562_LVM.cpp参考代码
"Sicily_Queue.rar_sicily"这个压缩包文件显然包含了与在Sicily平台上实现高效队列操作相关的代码或文档。 首先,我们需要理解队列的基本概念。队列就像一个等待服务的队伍,新进来的元素(入队)会排在队伍的末尾...
本cpp是sicily的1006的解题代码 这份代码以最简单的方式实现了它的功能要求 值得学习一番
【描述】"本程序是中山大学sicily上1200-1221-1298-1324-1325的参考代码",说明这些代码是中山大学 sicily 课程的教学辅助材料,用于帮助学生理解和实践课程内容。代码通常包括示例、练习题的解决方案或者项目代码,...
【标题】"sicily1294.rar_1294_sicily" 提供的信息表明,这可能是一个与中山大学ACM竞赛相关的代码压缩包,其中包含了对问题1294 "Sicily"的解决方案。在ACM(国际大学生程序设计竞赛,International Collegiate ...
在 sicily 平台上,题目涉及的编程语言可能包括但不限于 Python、Java、C++、JavaScript 等,而解题思路可能涉及到排序算法(如冒泡排序、快速排序)、搜索算法(如二分查找、深度优先搜索)、动态规划、图论、字符...
sicily1007题答案,附代码解释,可以在平台上通过
对于题目1093和1888,它们的具体内容和要求是未知的,可能涉及到排序、搜索、图论、动态规划、字符串操作等各种算法和问题领域。要完全理解这些代码,我们需要查看题目描述,这通常会提供输入格式、输出要求、示例...
3. **数据结构与算法**:作为学术项目,可能涉及到复杂的数据结构(如链表、树、图)和算法(排序、搜索、动态规划等),这些都是计算机科学的基础。 4. **软件工程**:项目可能遵循软件工程的原则,包括需求分析、...
在“sicily_source.zip_sicily”这个压缩包文件中,我们主要关注的是与西西里相关的编程练习,这些练习涵盖了输入输出操作和标准程序设计,同时也涉及到超高精度浮点数的输出问题以及关联数组这一数据结构。...
- "robot.cpp" 文件的名称没有明确指明具体主题,但考虑到 sicily online judge 的背景,这可能是一个关于机器人路径规划或运动控制的编程问题,可能涉及到搜索算法(如深度优先搜索或广度优先搜索)或图论中的移动...