P1855 榨取kkksc03
题解
二维背包板子题
f[ i ][ j ] 前 n 个物品,花费金钱不超过 i ,花费时间不超过 j 的最大价值
如果每个物品只能选一次,那么就相当于在01背包上多加一维
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue> using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n,m,t;
int w[],v[];
int f[][];
int ans=; int main()
{
n=read();m=read();t=read();
for(int i=;i<=n;i++) w[i]=read(),v[i]=read();
for(int k=;k<=n;k++)
for(int i=m;i>=w[k];i--)
for(int j=t;j>=v[k];j--)
f[i][j]=max(f[i][j],f[i-w[k]][j-v[k]]+),
ans=max(ans,f[i][j]);
printf("%d\n",ans);
return ;
}