dp背包问题

托塔李天王的三太子那吒,本领高强,他要赶在奥林匹克运动会之际,开一个头脑奥林匹克比赛,获胜者的奖品就是经过提练后的"氦-3"晶结体;该物质在月球上大量存在,是一种无色、无味的氦气同位素,它在核聚变研究中有重要作用。氦-3还是一种绝对清洁的能源,因为它本身不带放射性,因此不会产生任何放射性废料。可是如何从月球上将该晶体运回地球呢?那吒说:用我的肚兜吧!当然他的肚兜易受太阳风等因素的影响,载重量不能超过K(1≤n≤100000),超过这个值,肚兜就不会飞了;这个K值那吒会告诉你的,同时还会告诉你每一个晶体的重量。
你的任务是使这个肚兜一次能运回更多的晶体。

Input
输入文件jiangpin.in有两行:
第一行有两个正整数n和k,用一个空格隔开。表示有n个晶体,肚兜最大载重量为k。
第二行有n个不超过10000的正整数,分别表示n个晶体的重量,数与数之间用一个空格隔开。

Output
输出文件jiangpin.out只有一行,该行只有一个正整数,表示那吒的肚兜一次能运回的晶体重量的最大值。

Sample Input
5 15
2 4 4 8 10
Sample Output
14
HINT

【数据限制】

40%的数据: 1≤n≤20。

100%的数据:1≤n≤100。

#include<iostream>
using namespace std;
int main(void){
int n,k;
int a;
int dp[100]={0,0,0,0,0};
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
    scanf("%d",&a);
    for(int j=k;j>=a;j--){
        dp[j]=max(dp[j-1],a+dp[j-a]);
    }
}
printf("%d",dp[k]);
return 0;
}

做的第一个dp问题,感觉重点就是对状态转移方程的理解,背包容量是多少就用多大长度的数组。每个数组的值就是其以下标为最大容量的背包所能装的最大价值,
状态转移方程:背包容量的价值就是否取当前元素。
不取当前元素背包价值就是上一个容量的背包价值(dp[j-1])。
取当前元素背包价值就是当前元素价值加上减去当前物品质量的背包容量的价值(a+dp[j-a]本题质量和价值相同)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值