01背包 【模板】

01背包模板
测试链接

#include <bits/stdc++.h>
const int N = 10000;
using namespace std;
int dp[10001];
int v[N],w[N];
int main()
{
    int t,m;
    cin>>t>>m;
    for(int i=0;i<m;i++)cin>>w[i]>>v[i];
    for(int i=0;i<m;i++)
    {
        for(int j=t;j>=w[i];j--)
        {
            dp[j]=max(dp[j-w[i]]+v[i],dp[j]);
        }
    }
    cout<<dp[t]<<endl;
    return 0;
}

bytedance-006. 夏季特惠
测试链接
题解

#include <bits/stdc++.h>
const int N = 5e5+7;
typedef  long long ll;
using namespace std;
ll dp[N];
ll w[N],v[N];
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(00),cout.tie(0);
    int n,x;
    cin>>n>>x;
    int cnt=0;
    ll ans=0;
    for(int i=0;i<n;i++)
    {
        ll a,b,c;
        cin>>a>>b>>c;
        int ww = b - (a-b);
        int vv = c;
        if(ww<=0)ans+=vv,x-=ww;
        else w[cnt]=ww,v[cnt++]=vv;
    }

    for(int i=0;i<cnt;i++)
    {
        for(int j=x;j>=w[i];j--)
        {
            dp[j]=max(dp[j-w[i]]+v[i],dp[j]);
        }
    }

    cout<<dp[x]+ans<<endl;
    return 0;
}

posted @ 2025-08-02 15:01  屈臣  阅读(40)  评论(0)    收藏  举报