01背包

来源:互联网 发布:手机网页游戏平台源码 编辑:程序博客网 时间:2024/06/05 01:56

一维01背包:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct ppp{    int w;    int v;}data[105];int dp[1005];int T,m;int OneZeroPack(){    memset(dp,0,sizeof(dp));    for(int i=1;i<=m;i++)    {        for(int j=T;j>=data[i].w;j--)        {            dp[j]=max(dp[j],dp[j-data[i].w]+data[i].v);        }    }    return 0;}int main(){    while(cin>>T>>m)    {        for(int i=1;i<=m;i++)           cin>>data[i].w>>data[i].v;        OneZeroPack();        cout<<dp[T]<<endl;    }    return 0;}

二维01背包:

#include <iostream>#include <stdio.h>#include <cstring>using namespace std;int w[105];//质量int p[105];//价值int dp[105][1005];int main(){    int t,m;    while(cin>>t>>m)     {        memset(dp,0,sizeof(dp));        for(int i=1; i<=m; i++)        {            cin>>w[i]>>p[i];        }        for(int i=0;i<=m;i++)        {            dp[i][0]=0;        }        for(int i=0;i<=t;i++)        {            dp[0][i]=0;        }        for(int i=1; i<=m; i++)        {            for(int j=1;j<=t;j++) //j相当于 循环背包质量            {                if(w[i]<=j)                dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);                else                dp[i][j]=dp[i-1][j];            }        }        cout<<dp[m][t]<<endl;    }    return 0;}

一维01背包 相对 二维既节省时间又节省空间

0 0