背包刷题

版权声明:转载标注来源喔~ https://blog.csdn.net/iroy33/article/details/89343571


//一定要刚好把钱花完,问有多少种方法
//dp[i]代表花i钱的方法数

 

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
//一定要刚好把钱花完,问有多少种方法
//dp[i]代表花i钱的方法数
int dp[10010];
const int N=110;
int a[N];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        cin>>a[i];
    memset(dp,0,sizeof(dp));
    dp[0]=1;    //一块钱也不花是一种方案
    for(int i=1;i<=n;++i)
        for(int j=m;j>=a[i];--j)
    {
        dp[j]+=dp[j-a[i]];
    }
    cout<<dp[m]<<endl;
    return 0;
}

for(int i=1;i<=n;++i)
    {
        for(int j=V;j>=v[i];--j)
        {
            for(int k=W;k>=w[i];--k)

                dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+c[i]); //写急了写错括号位置导致一直输出0
        }
    }

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int V,W,n;
int dp[410][410];       //体积为i质量为j时的最大卡路里
int v[55];
int w[55];
int c[55];
int main()
{
    cin>>V>>W>>n;
    for(int i=1;i<=n;++i)
    {
        cin>>v[i]>>w[i]>>c[i];
       // cout<<v[i]<<' '<<w[i]<<' '<<c[i]<<endl;
    }

    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;++i)
    {
        for(int j=V;j>=v[i];--j)
        {
            for(int k=W;k>=w[i];--k)
                dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+c[i]); //写急了写错括号位置导致一直输出0
        }
    }
   // cout<<V<<' '<<W<<endl;
    cout<<dp[V][W]<<endl;
    return 0;
}
//???

猜你喜欢

转载自blog.csdn.net/iroy33/article/details/89343571