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;
}

浙公网安备 33010602011771号