HDU-2602 Bone Collector——01背包
2024-10-21 03:16:49
首先输入一个数字代表有n个样例
接下来的三行
第一行输入n 和 v,代表n块骨头,背包体积容量为v。
第二行输入n块骨头的价值
第三行输入n块骨头的体积
问可获得最大的价值为多少
核心:关键在于dp【j】=max(dp[j],dp[j-w[i]]+v[i]) 的状态转移!!
背包最多能装下题目中所给的骨头,如体积为10的背包能装下体积分别为5和4的体积一块,
但最后其实背包还剩余了体积为1的位置没有讨论,则通过 j-- 进行剩余补充讨论。
在体积不断减小的同事每次都对目前这个这个体积(目前状态)下最多能装多少已知的骨头,
并通过对比之前的数据(上一次的状态)取较大值。即可获得该目标体积的最大值!!
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <stdio.h>
#define ll long long
using namespace std;
int a[];
int b[];
int dp[];
int main()
{
int m,n,k,t;
cin>>t;
while(t--)
{
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(dp,,sizeof(dp));
cin>>m>>n;
for(int i=;i<=m;i++)
{
cin>>a[i];
}//价值
for(int i=;i<=m;i++)
{
cin>>b[i];
}//体积
for(int i=;i<=m;i++)
{
for(int j=n;j>=;j--)
{
if(j>=b[i])
dp[j] = max(dp[j],dp[j-b[i]]+a[i]);
}
}
cout<<dp[n]<<endl;
}
return ;
}
最新文章
- 【2016-11-2】【坚持学习】【Day17】【通过反射自动将datareader转为实体info】
- 前端scss的使用及gulp发布方式
- hdu Proud Merchants
- HLS视频直播
- Codeforces Gym 100015C City Driving 离线LCA
- jQery无缝滚动效果
- OOP—还原被遮掩的继承名称
- centos 忘记 root 密码
- Java中的内存泄漏问题
- Android中View绘制优化二一---- 使用<;include />;标签复用布局文件
- Cocos2d-x在Android在竖屏切换
- directive(指令里的)的compile,pre-link,post-link,link,transclude
- ASP.NET在母版页或内容页上获取控件ID
- 37、mysql初识
- Codeigniter使用HMVC(一)
- centos7.2下nginx安装教程
- 【JLOI 2012】时间流逝(期望,树上高斯消元)
- Plupload上传插件中文帮助文档
- ansj分词史上最详细教程
- tyvj P2018 「Nescaf&#233;26」小猫爬山 解题报告