1782. Knapsack(动态)

来源:互联网 发布:java课程设计 编辑:程序博客网 时间:2024/05/18 02:56
/*1782. Knapsack(动态规划)题目大意:给出n个物体(每个物体有自己的容量)和一个背包,          求出背包能装入物体的最大总容量  方法:建立一个maxSize数组,记录当剩余j容量时能装入物体的最大容量      当有j容量剩余时,若此时有个体积为size[index]的物体要进入,      判断该物体是否能进入的方法是。Preleft=j-size[index]为当前容量      空出size[index]后, 找到maxSize 在剩余Preleft时的最大体积是多少      比较当前剩余j容量时装物体的体积 ,取大的那个      max( maxSize[h] , size[index]+maxSize[PreSize] )      则maxSize[max]记为结果    */#include <iostream>#include <stdlib.h>#include <algorithm>using namespace std;int main(){    int size[10000];    int maxSize[10000];    int t;    int n,m;    cin >> t;    for(int i=1; i<=t; i++)    {        cin >> n >> m;        for(int k=0; k<n; k++)            cin >> size[k];        for(int index=0; index<n; index++)        {           for(int j=m; j >=size[index]; j--)           {                            maxSize[j] =max(maxSize[j],size[index]+maxSize[j-size[index]]);                               }                }         cout << maxSize[m] << endl;             }    system("pause");    return 0;}