测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A37146. 买瓜子校庆,采购瓜子。资金N(1<=N<=1000)元,M(1<=M<=30)种瓜子。问最多能采购多少千克的瓜子?比如N=80元,M=2种。第1种,每袋18元10千克;第2种,每袋30元20千克。输入样例80 218 1030 20输出样例50提示:18+30+30=78元 10+20+20=50千克

填空题 困难

题目描述

买瓜子

校庆,采购瓜子。资金N(1<=N<=1000)元,M(1<=M<=30)种瓜子。问最多能采购多少千克的瓜子?比如N=80元,M=2种。第1种,每袋18元10千克;第2种,每袋30元20千克。

输入样例

80 2

18 10

30 20

输出样例

50

提示:18+30+30=78元 10+20+20=50千克

参考答案

#include<bits/stdc++.h> using namespace std; int dp[50][1010]; //表示,前i个物品,在价值w的情况下,最大的重量是dp[i][w] int wt[1010],v[50]; //wt是价格,v是重量 int n,w; int main() { cin>>w>>n; for(int i=1;i<=n;i++) cin>>wt[i]>>v[i]; //wt[i]代表第i种瓜子多少钱 v[i]代表第i种瓜子多少千克 for(int i=1;i<=n;i++) //遍历n种瓜子,每种要么选,要么不选 { for(int j=1;j<=w;j++) //j是价格 { if(j>=wt[i]) //wt是价格 { if(dp[i-1][j]>dp[i][j-wt[i]]+v[i]) { dp[i][j]=dp[i-1][j]; } else { dp[i][j]=dp[i][j-wt[i]]+v[i]; } } else { dp[i][j]=dp[i-1][j]; } } } cout<<dp[n][w]<<endl; return 0; }
上一题 下一题