两道需要排序的dp背包下问题 -- hdu 2546 饭卡/ hdu 3466 Proud Merchants

Android - 蓝牙开发 文章目录科普SIG类型制式编程Classic BluetoothBluetooth Low Energy蓝牙的UUID是什么?有什么用? 科普 https://zh.wikipedia.org/wiki/%E8%97%8D%E7%89%99 蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由 2.4 至 2.485 GHz 的 ISM(工业、科学、医疗)频段来进行通信。1994 年由电信商 阅读详情

饭卡  (hdu 2546)

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13144    Accepted Submission(s): 4550


Problem Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
 

Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。

n=0表示数据结束。
 

Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
 

Sample Input
  
1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0
 

Sample Output
  
-45 32
 

Source
 

m元买n种东西,与背包问题很相似,但是多个约束条件 当余额>5元才可以继续买。

 仅仅按照普通的背包思路问题来看的话, 假设状态"m元买n种商品所能剩下的最小余额"表示为f(n,m),那么先考虑第n种商品,最简单的情况就是第n种商品不买,那么f(n,m)=f(n-1,m)。

再看买第n种的情况,首先必须满足m>5, 假如买完后余额为负数p[n]>m显然就不用继续往下买了,此时f(n,m)=m-p[n].  

而当p[n]<=m时,正常来说应该状态转移为 f(n, m) = f(n-1, m-p[n]), 但是这里有个问题就是每次买商品都要余额大于5,那么买商品之间的顺序就会影响,比如余额11,两种商品分别需要10,5.先买第一种就不能买第二种了,先买第二种的话还能买第一种。所以挑选第n个商品可能会有后效性。考虑如果想买k种商品,最好每次买完余额尽可能大于5,也就是假如这k种能同时买的话一定是先买最小的那种,先挑价格小的就不会影响后面挑价格大的。

基于这种考虑,我们可以先对商品按价格从大到小排序,因为我们是将前n种转移到前n-1种(也就是先挑第n种)。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define maxn 1005

int p[maxn];
int dp[maxn][maxn];

int cmp(const int& a, const int&b)
{
    return a>b;
}

int main()
{
   int n, m;
   while(~scanf("%d", &n)){
        if(!n) break;

        for(int i = 1; i <= n; i++)
            scanf("%d", p+i);
        scanf("%d", &m);
        sort(p+1, p+n+1, cmp);  //从大到小排序

        for(int i = 0; i < maxn; i++)   //初始状态
            dp[0][i]=i;

        for(int i = 1; i<= n; i++)
        for(int j = 1; j <= m; j++){
            dp[i][j] = dp[i-1][j];  //第i种不挑
            if(j>=5 && j >= p[i]) dp[i][j] = min(dp[i][j], dp[i-1][j-p[i]]); //挑第i种且余额为正
            else if(j >= 5) dp[i][j] = min(dp[i][j], j-p[i]); //挑完余额为负
        }

        printf("%d\n", dp[n][m]);
   }
    return 0;
}

当然这个问题还可以用一维滚动数组优化空间消耗,这里主要为了直观。




Proud Merchants(hdu 3466)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 2955    Accepted Submission(s): 1224


Problem Description
Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerful kingdom in the world. As a result, the people in this country are still very proud even if their nation hasn’t been so wealthy any more.
The merchants were the most typical, each of them only sold exactly one item, the price was Pi, but they would refuse to make a trade with you if your money were less than Qi, and iSea evaluated every item a value Vi.
If he had M units of money, what’s the maximum value iSea could get?

 

Input
There are several test cases in the input.

Each test case begin with two integers N, M (1 ≤ N ≤ 500, 1 ≤ M ≤ 5000), indicating the items’ number and the initial money.
Then N lines follow, each line contains three numbers Pi, Qi and Vi (1 ≤ Pi ≤ Qi ≤ 100, 1 ≤ Vi ≤ 1000), their meaning is in the description.

The input terminates by end of file marker.

 

Output
For each test case, output one integer, indicating maximum value iSea could get.

 

Sample Input
  
2 10 10 15 10 5 10 5 3 10 5 10 5 3 5 6 2 7 3
 

Sample Output
  
5 11
 

Author
iSea @ WHU
 

Source
 

这道题目思路跟上一题思路基本一样。有m元n种商品,每种商品价值v[i],价格p[i],求能获得最大价值,约束条件是每种商品买之前余额必须大于q[i]. 同样的问题,买一种商品后改变了余额会影响其他商品的购买,也就是必须考虑购买的顺序。那么先买什么呢,答案是q[i]-p[i]最大的。 

有个比较简单粗暴的证明,假设买a,b两种商品,对应Pa,Qa. Pb,Qb。假如要先买a商品,那么最少余额为Pa+Qb,假如先买b商品,那么最少余额为 Pb+Qa. 想要先买a的话必须满足, Pa+Qb<Pb+Qa ==> Qa-Pa>Qb-Pb

其实上一题先买小的同样也是这道题目的特殊情况,只不过他们对应的Q值都是为5而已,即5-Pa>5-Pb ==> Pa<Pb


#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

#define maxn 505

struct data
{
    int p;
    int q;
    int v;
    bool operator < ( const data & a) const
    {
        return q-p < a.q-a.p;
    }
};

data arr[maxn];
int dp[5005];   //一维滚动数组节省空间
int main()
{
    int n, m;
    while(cin >> n >> m){
        memset(dp, 0, sizeof(dp));
        dp[0] = 0;

        for(int i = 1; i <= n; i++)
            cin >> arr[i].p >> arr[i].q >> arr[i].v;
            sort(arr+1, arr+n);  //按照q-p从小到大排序

        for(int i = 1; i <= n; i++)
        for(int j = m; j>=1; j--)
            if(j >= arr[i].q && j >= arr[i].p)
                dp[j] = max(dp[j], dp[j-arr[i].p]+arr[i].v);


        cout << dp[m] << endl;
    }
    return 0;
}














验证方法、符合性方法与设计保证的关系 未来,随着适航标准和工程实践的不断演进,验证与符合性方法将持续优化,以应对日益复杂的系统设计需求。设计保证过程中的验证活动具有双重作用,既用于设计过程的质量控制和风险管理,又作为适航符合性方法的重要支持材料。在未来的航空电子系统开发中,进一步优化设计保证与验证活动的协同作用,将有助于应对日益复杂的工程挑战,推动航空安全技术的发展。为了全面理解这二者之间的关系,本章将系统说明设计保证过程中的验证活动如何既服务于设计保证,又作为符合性方法中的核心证明材料。最终,通过功能测试和环境测试验证硬件的实际性能。 阅读详情

相关推荐

TSMaster MBD模块实战:如何用Simulink模型快速搭建汽车电子测试环境

本文实战演示了如何利用TSMaster的MBD模块,将Simulink模型快速部署为汽车电子自动化测试环境的核心。通过建立模型与TSMaster系统变量的实时数据通道,并利用数据仓库统一数据定义,工程师能无缝连接算法仿真与真实总线网络,显著提升从模型到HIL测试的验证效率。

php55的博客 207

dp(动态规划,结构体排序)

很多肥老鼠认为,长的越肥,奔跑速度就越快,为了反驳这个观点,你现在需要对老鼠的体重和速度进行研究,你要在老鼠序列中找出一个子序列,使得老鼠的体重在增加,但是速度却在减慢 Input 输入以eof结束。 输入中每行有两个正整数,分别表示老鼠的体重和速度,范围均在1到10000之间,输入数据最多有1000只老鼠。 某些老鼠可能有相同的体重,某些老鼠可能有相同的速度,某些老鼠可能体重和速度都相同...

weixin_44373494的博客 507

Chatbox使用指南

Chatbox使用指南

weixin_65289420的博客 2万+

需要先排序的DP-----划分土地

【问题描述】   农夫John准备扩大他的农场,他正在考虑N (1 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要付5x5=25. FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费. 【输入】 第1行: 一个

soul_machine的专栏 723

【2026年华为暑期实习(AI)-4月29日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要涵盖了机器学习和深度学习中的多个核心概念与技术,包括非负矩阵分解、条件数、MobileNet创新点、LDA降维、大模型评测指标、半精度训练、多任务学习、GPU存储层次、正则化、张量并行等。通过12道单选题和8道多选题的形式,系统性地考察了相关理论原理、应用场景及工程实践要点。题目设计注重概念准确性(如LDA目标函数)、技术细节(如Megatron-LM的并行策略)与实际应用(如FP16训练动机),并包含概率统计(二项分布)和数值计算(微分误差分析)等数学基础内容,全面检验读者对AI领域关键知识的掌握

m0_73659489的博客 143

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(KEPserverOPC通信应用)

SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-优快云博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-优快云博客1、如何实现PID反作用调节?S7-1200PLC和KEPserver OPC通信-优快云博客。

RXXW_Dor的博客 1781

HDU3466 Proud Merchants (01dp + 排序)

HDU3466 文章目录HDU3466中文题意思路AC代码启示 中文题意 给出n个商品,以及自己的钱数m,然后以下n行,每一行给出p,q,v三个数,表示第i个商品的价格,以及最少需要多少钱才能进行购买,和收益 求最大价值 思路 根据HDU2546(饭卡)的经验,我们也不难发现这个题的产品应该也是需要排序的,但是每个商品有两个变量,这个就带来了排序的困难. 如果仅凭直觉,到底是以哪个参数排序为主...

Dawn-K の Blog 242

2025年7月5日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案

2025年7月5日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案

伶俐角少儿编程 898

【ICPC-278】hdu 3466 Proud Merchants(0/1背包)

点击打开链接hdu 3466 思路: 0/1背包 分析: 1 这一题和"hdu2546 饭卡"有点像,但是又有不同,不同的是这一题每一个物品都有一个限制的值Q[i],求最大的价值 2 题目明确提到每一种物品只能卖一次或这不卖,那这明显就是0/1的性质,但是现在多了一个条件钱不能少于Q[i]。这边的话我各种YY无果之后,果断看了题解,发现是要按照q-p排序,然后再做dp。 3 经过一番的YY之后,...

藏经阁 | 玄苦 1646

VMware Horizon 8 2111 部署系列(九)创建即时克隆桌面池

即时克隆桌面池是在 vCenter Server 中使用 vmFork 技术(称为即时克隆 API)从最佳配置映像创建的自动桌面池。即时克隆共享同一个基础映像虚拟机,使用基础映像虚拟机的快照创建的,它使用的存储空间也少于完整虚拟机。 即时克隆始终保持开机状态,并在注销后从当前发布的映像重新创建。...

白昼的技术专栏 4043

1.DJI-payload SDK负载开发准备和硬件连接及运行示例代码

大疆psdk开发环境

哒宰的博客 1443

hdu 3466 Proud Merchants(0/1背包)

点击打开链接hdu 3466 思路: 0/1背包 分析: 1 这一题和"hdu2546 饭卡"有点像,但是又有不同,不同的是这一题每一个物品都有一个限制的值Q[i],求最大的价值 2 题目明确提到每一种物品只能卖一次或这不卖,那这明显就是0/1的性质,但是现在多了一个条件钱不能少于Q[i]。这边的话我各种YY无果之后,果断看了题解,发现是要按照q-p排序,然后再做dp。 3 经过一番的Y...

我是传奇 118

12、认知地图的建模与学习

本博客系统介绍了认知地图的定义、背景及其在机器智能领域的应用,重点探讨了模糊认知地图(FCMs)的建模方法与优势。文章还对比分析了几种主流的认知地图模型(如Axelrod模型、Kosko模型等),并讨论了模型的稳定性条件及实际应用前景。通过智能制造和医疗诊断的具体案例,展示了认知地图在复杂因果推理中的强大能力,并提出了模型优化方向与未来研究展望。

plant的博客 210

hihocoder - 第十二周 - 刷油漆

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票——他们只能够乘坐最为破旧的火车进行他们的旅程。 不仅如此,因为美食节的吸引,许多人纷纷踏上了和

写东西的地方 1266

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hihocoder-第九周-状态压缩二

#include using namespace std; int dp[1001][6][1025]; int getValue( int s, int m) { s >>= (m-1); return s&1; } int main() { int N, M; while( cin >> N >> M){ int col = (1<<(2*

写东西的地方 1094

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

hihocoder-第八周-dp状态压缩

sdf

写东西的地方 957

poj 1821 dp+单调队列

Fence Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3858   Accepted: 1176 Description A team of k (1 <= K <= 100) workers should paint a fence which cont

写东西的地方 771

cf 264b dp

B. Good Sequences time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Squirrel Liss is interested in sequences.

写东西的地方 771

hihocoder_ 第六周 - 01背包

时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 小Ho现在手上有M张奖券,而奖品区有N件奖品,分别标号为1到N,其中第i件奖品需要need(i)张奖券进行兑换,同时也只能兑换一次,为了使得辛苦得到的奖券不白白浪费,小Ho给每件奖

写东西的地方 756

hdu 3506 dp+四边形不等式优化

Monkey Party Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 953    Accepted Submission(s): 418 Problem Description Far away from

写东西的地方 715

hihocoder-第七周-完全背包

时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 等等,这段故事为何似曾相识?这就要从平行宇宙理论说起了………总而言之,在另一个宇宙中,小Ho面临的问题发生了细微的变化! 小Ho现在手上有M张奖券,而奖品区有N种奖品,分别标号为1

写东西的地方 669

hdu 4986 Arc of Dream 矩阵快速幂求递推式

Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 2534    Accepted Submission(s): 777 Problem Description An Arc of Drea

写东西的地方 625

hdu 3507 斜率优化dp入门

Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 6389    Accepted Submission(s): 1965 Problem Description Zero has an

写东西的地方 617

poj 3494 dp+单调栈

Largest Submatrix of All 1’s Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 5088   Accepted: 1897 Case Time Limit: 2000MS Description Given a m-by-n

写东西的地方 591

poj 2392 多重背包

Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8877   Accepted: 4209 Description The cows are going to space! They plan to achieve orbit by b

写东西的地方 584

poj 2686 状态dp

Traveling by Stagecoach Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2184   Accepted: 737   Special Judge Description Once upon a time, there was a tr

写东西的地方 559

poj 2778 AC自动机+dp矩阵快速幂

DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12628   Accepted: 4818 Description It's well known that DNA Sequence is a sequence only contains

写东西的地方 493
上一篇: poj-2774 二分+字符串哈希+二分
下一篇: cf 264b dp
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值