题目浏览
资源限制
时间限制:2.0s 内存限制:256.0MB
T大计算机系费尽九牛二虎之力,终于挖来了某系第一肌肉男(从此被称为计算机第0肌肉男)。他平时除了自习,就是看电影,尤其是一些霓虹的台词较少的动作片。但是即使肌肉男有强大的肌肉,仍然会面临每个月有限的流量耗尽的问题。已知肌肉男的流量p是有限的,现在有某舍友提供的n部最新电影,看每部电影会消耗肌肉男一定的流量,但是也会给肌肉男带来一定的兴奋值。肌肉男想在自己有能力的情况下产生最多的兴奋值,他由于平时忙于上自习,把这个任务交给了你,如果你能完成,他就帮你领一年的外卖哦!
输入数据第一行有一个数字p,表示肌肉男的流量值;第二行是一个数字n,表示一共有n部电影;以下有n行,每行第一个数表示该电影消耗的流量大小,第二个数表示该电影带给肌肉男的兴奋值。
输出数据只有一行,表示肌肉男所能达到的最大兴奋值。
算法浏览
#include<iostream>
#include<algorithm>
const int N = 100010;
using namespace std;
int p,n;
int v[N], w[N];//消耗的流量的大小,兴奋值
int dp[N];//影片为i,流量为j的最大兴奋值
int main()
{
cin >> p >> n;
for(int i = 1; i <= n; i++)
scanf("%d%d", &v[i], &w[i]);
for(int i = 1; i <= n; i++)
for(int j = p; j >= v[i]; j--)
dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
cout << dp[p] << endl;
}
核心思路
我肯定没懂题目里讲的是啥(
经典的01背包问题
背包的容量 — 拥有的流量
物品的价值 — 给予的兴奋值
物品的重量 — 下载所消耗的流量
本文介绍了一个经典的01背包问题案例,描述了如何帮助一位肌肉男在有限的流量下选择观看电影以获得最大兴奋值。通过算法实现,演示了如何计算在不同流量消耗下所能获得的最大兴奋值。

被折叠的 条评论
为什么被折叠?



