首页 > 学院 > 开发设计 > 正文

[HPU] Cafeteria [dp][01背包]

2019-11-08 01:20:16
字体:
来源:转载
供稿:网友

题目描述 Nanae把饥肠辘辘的josnch带去一家自助餐厅,面对面前眼花缭乱的美味josnch呆住了。

假设有N种食物,每种食物只有一样,而且每种食物有对应的体积Wi (1 <= Wi <= 400),食用每一种食物都能增加对应的愉悦值Di(1 <= Di <= 100).

现在已知josnch肚子的容量为M(1 <= M <= 12,880),现在假设josnch足够聪明,请问他如何选择能在可接受的范围内达到愉悦值最大。

输入 第一行输入两个整数,N和M。

第二行到第N+1行输入每行两个整数,Wi 和 Di ,分别代表 第i件物品的体积和所能带来的愉悦值。

输出 输出一个整数,也就是在最佳选择下的愉悦值。

样例输入 4 6 1 4 2 6 3 12 2 7 样例输出 23

题解

裸01背包

#include<stdio.h>#include<string.h>#include<algorithm>#define MAX_N 10002using namespace std;int v[MAX_N],w[MAX_N],dp[MAX_N];int main(){ int W,N; while(~scanf("%d%d",&N,&W)){ for(int i=0;i<N;i++) scanf("%d%d",&w[i],&v[i]); memset(dp,0,sizeof(dp)); for(int j=0;j<N;j++) for(int k=W;k-w[j]>=0;k--) dp[k]=max(dp[k],dp[k-w[j]]+v[j]); int ans=0; for(int i=W;i>=0;i--) if(dp[i]>ans) ans=dp[i]; PRintf("%d/n",ans); } return 0;}
上一篇:数据加密

下一篇:多线程---线程安全

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表