rqnoj 是时候说了

题目描述

你已经忍耐太久了。现在是时候把你对大家的看法说出来了。

假设你对n个人说出自己的看法,在和第i个人说完后,你的健康指数将减少lostHealth[i],而你的快乐指数将增加gainJoy[i]。你可以和每一个人最多说一次,并且你不必按照特定顺序进行。

你的目标是得到尽可能多的快乐。最初的时候,你的健康指数为100,而快乐指数为0。如果你的健康指数为0或负数,即使你得到再多快乐,你也只会痛苦地死去。

现在编写程序请你计算出你可以得到的最大快乐指数。

输入格式

输入共3行。

第1行,1个正整数n,表示有n个人。(1<=n<=20)

第2行,n个整数,第i个整数表示你对第i个人说话会失去的健康指数lostHealth[i]。(0<=lostHealth[i]<=100)

第3行,n个整数,第i个整数表示你对第i个人说话会得到的快乐指数gainJoy[i]。(0<= gainJoy[i]<=100)

输出格式

输出共1行,1个整数,表示你可以得到的最大快乐指数。

样例输入

样例输出

提交题目  Error [ 更改语言 ] Language

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
using namespace std;
int n,f[10010],losthealth[10010],gainhappy[10010];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d",&losthealth[i]);
    for(int j=1;j<=n;j++)
    scanf("%d",&gainhappy[j]);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=100-losthealth[i];j++)
        if(f[j]<f[j+losthealth[i]]+gainhappy[i])
        f[j]=f[j+losthealth[i]]+gainhappy[i];
    }
    int ans=-1;
    for(int i=0;i<=100;i++)
    if(f[i]>ans)
    ans=f[i];
    printf("%d\n",ans);
    return 0;
}

  

时间: 2024-08-26 16:00:18

rqnoj 是时候说了的相关文章

RQNOJ 329 刘翔!加油!:01背包

题目链接:https://www.rqnoj.cn/problem/329 题意: 刘翔有n封信,每封信都有自己的欣赏价值value[i].消耗时间time[i].消耗体力h[i].和得到的鼓舞w[i]. 观看信件必须按照价值递增(大于)的顺序观看,不一定需要全看. 可是,刘翔在伤病中,时间和体力分别为t,m,同时看完之后体力不能为0. 问你受到的鼓舞最大为多少. 题解: 这道题里value[i]真的没有用... 表示状态: dp[i][j][k] = max encouraging i:考虑到

RQNOJ 201 奥运大包围:LIS + 拼链成环

题目链接:https://www.rqnoj.cn/problem/201 题意: 开始时n(n<=1000)个人手拉手围成一个圈. 后来这些人中的一些按顺序向里面出圈形成一个新圈.从而使原圈形成一个从高到低,最低与最高连接的圈. 新圈重复相同的操作,直到没有人要出圈为止. 问最少要形成多少个这样的圈. 题解: (1)拼链成环: 对于一个环,可以用两条由环拆开的链拼在一起表示. 例如:有一个环为"1,2,3,4"(1和4连在一起),则可以表示为"1,2,3,4,1,2,

【单调队列】【cogs825】【RQNOJ 167】免费午餐

825. [RQNOJ 167] 免费午餐 ★☆ 输入文件:lunch.in 输出文件:lunch.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 为了增加顾客,Sally的店铺决定提供免费午餐,顿时门庭若市,但是不久Sally的原材料不足了-.因此Sally决定公布一项决定:凡是来本店吃免费午餐的,一天吃能吃一次,吃的数量必须比上一次吃的少,且免费午餐将只有N个种类任君选择,为了能吃到最多的免费午餐,你将如何安排每日吃的数量呢? [输入文件] 第一行一个数N,表示免费

【解题报告】[动态规划]RQNOJ PID2 / 开心的金明

原题地址:http://www.rqnoj.cn/problem/2 解题思路:背包问题. 状态转移方程:DP[i][j]=max(DP[i-v[j]][j-1]+p[j]*v[j],DP[i][j-1]) DP[i][j]表示最多话费i的钱,购买前j+1个物品所能达到的最大价值. 解题代码: 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 i

RQNOJ 57 找啊找啊找GF:01背包

题目链接:https://www.rqnoj.cn/problem/57 题意: sqybi在七夕这天太无聊了,所以他想去给自己找GF. 总共有n个MM. 搞定第i个MM要花费rmb[i]块大洋.rp[i]的人品.tim[i]的时间. 现在sqybi有m块大洋.r个人品. 问你在泡到MM的数量最多的情况下,所用的最短时间是多少. 题解: 表示状态: dp[i][j][k][p] = min cost time i:考虑到第i个MM j:花费的rmb k:花费的rp p:已经搞定的MM数量 找出答

RQNOJ 342 最不听话的机器人:网格dp

题目链接:https://www.rqnoj.cn/problem/342 题意: DD 有一个不太听话的机器人,这个机器人总是会有自己的想法,而不会完全遵守 DD 给它的指令. 现在 DD 在试图命令机器人走迷宫.迷宫是一个 N*N 个格子组成的区域,格子自左上角到右下角从 (1,1) 到 (N,N) 编号.第 i 行.第 j 列的格子编号为 (i,j).迷宫中的某些区域是障碍物,机器人不能移动到那里. DD 给了机器人 M 条指令,指令的类型包括"前进一步""后退一步&q

RQNOJ 429 词链:单调栈

题目链接:https://www.rqnoj.cn/problem/429 题意: 如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链. 如:i,int,integer. 给你一堆按字典序排好的字符串,问你最长的词链有多长(词链中的字符串个数). 题解: 单调栈. 找出单调性: 对于栈内的元素,从栈底到栈顶为单调,形成一个词链. 找出答案: 扫一遍给出的字符串,栈的最大高度即为答案. 维护单调性: 因为字符串按字典序排好,已经达到了是单调性

RQNOJ 671 纯洁的买卖:无限背包

题目链接:https://www.rqnoj.cn/problem/671 题意: ALEJ要通过倒卖东西来赚钱. 现在他有m元经费. 有n种物品供他选择,每种物品数量无限. 第i件物品的买入价为c[i],卖出价为r[i],每卖出一件物品i后,要交c[i]的税. 问:一次买卖之后,经费最多有多少. 题解: 注:(1)"买"和"卖"是有顺序的. 也就是说,收购一件物品所得到的"未来利润"并不能当作现在的经费来用. (2)"缴税"

RQNOJ 622 最小重量机器设计问题:dp

题目链接:https://www.rqnoj.cn/problem/622 题意: 一个机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得. w[i][j]是从供应商j处购得的部件i的重量,c[i][j] 是相应的价格. 试设计一个算法,给出总价格不超过d的最小重量机器设计. 题解: 表示状态: dp[i][j] = min weight i:考虑到第i个零件 j:当前花费 找出答案: min dp[n][j] (0<=j<=d) 如何转移: 对于当前零件i,枚举不同的供应商j,转移

RQNOJ 311 [NOIP2000]乘积最大:划分型dp

题目链接:https://www.rqnoj.cn/problem/311 题意: 给你一个长度为n的数字,用t个乘号分开,问你分开后乘积最大为多少.(6<=n<=40,1<=k<=30) 题解: 简化问题: 给原数字之前添加一个"1 *",乘号不计入数量,对答案无影响. 例如:"1231"可以变成"(1*)1231". 表示状态: dp[i][j] = max num(最后一个乘号之前的最大乘积) i:此时在第i个数的前