博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个约束下的dp问题
阅读量:4672 次
发布时间:2019-06-09

本文共 587 字,大约阅读时间需要 1 分钟。

洛谷P1510

分析:本质上还是一个01背包,将体力当做重量,体积当做价值。配上滚动数组

即dp[j]代表在体力耗费为j时最大能搬运多少体积的石头,当dp[j]>v时就说明存在满足情况的解,这样,就选择最小的j就可以了

PS:我这里用了个中间结果ans,其实没必要,可以直接在后面加上一个for循环,寻找j最小时便满足大于v的dp【j】就行了。

#include
using namespace std;typedef long long ll;const double pi=acos(-1);int a[10010],b[10010];int dp[10010];int main(){ int v,n,c;scanf("%d%d%d",&v,&n,&c); int ans=-1; for(int i=0;i
=b[i];j--){ dp[j]=max(dp[j],dp[j-b[i]]+a[i]); if(dp[j]>=v){ ans=max(ans,c-j); } } } if(ans!=-1) cout<
<

  

转载于:https://www.cnblogs.com/qingjiuling/p/10162555.html

你可能感兴趣的文章
存储控制器、MMU、flash控制器介绍
查看>>
hdu-1814(2-sat)
查看>>
自我反省
查看>>
反射,得到Type引用的三种方式
查看>>
pl sql练习(2)
查看>>
Problem B: 判断回文字符串
查看>>
谷歌浏览器,添加默认搜索引擎的搜索地址
查看>>
数据结构化与保存
查看>>
C# .net 获取程序运行的路径的几种方法
查看>>
为什么需要Docker?
查看>>
国内5家云服务厂商 HTTPS 安全性测试横向对比
查看>>
how to control project
查看>>
转 python新手容易犯的6个错误
查看>>
第四节 -- 列表
查看>>
Python入门学习笔记4:他人的博客及他人的学习思路
查看>>
webstorm里直接调用命令行
查看>>
关联规则算法之FP growth算法
查看>>
对数组序列进行洗牌
查看>>
决策树
查看>>
团队作业
查看>>