题目大意:
给出背包能装的骨头容量,给出每个骨头所占容积,和价值,求出背包所能装骨头的最大价值
解题思路:
每个骨头开始遍历,如果背包容量能盛下这个骨头,那就看是否当前容量下的价值,是否比“没加当前骨头容量的价值,加上当前骨头的价值”的价值大,否则就拿上这块骨头
代码:
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int val[1005]; int vol[1005]; int dp[1005]; int main(){ int t; int n,v; cin>>t; while(t--){ cin>>n>>v; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++)cin>>val[i]; for(int i=1;i<=n;i++)cin>>vol[i]; for(int i=1;i<=n;i++){ for(int j=v;j>=vol[i];j--){ if(dp[j]<dp[j-vol[i]]+val[i]) dp[j]=dp[j-vol[i]]+val[i]; } } cout<<dp[v]<<endl; } return 0; }