题目
每个人可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望,所以他想知道在自己的能力范围内,最多可以完成多少同学的愿望?
分析
二维费用背包
状态转移方程:
f
[
i
+
w
[
i
]
]
[
j
+
v
[
i
]
]
=
f
[
i
]
[
j
]
+
1
f[i+w[i]][j+v[i]]=f[i][j]+1
f[i+w[i]][j+v[i]]=f[i][j]+1
代码
#include <cstdio>
using namespace std;
int m,g,n,f[201][201],w[201],v[201];
int main(){
scanf("%d%d%d",&n,&m,&g);
for (int i=1;i<=n;i++)scanf("%d%d",&w[i],&v[i]);
for (int i=1;i<=n;i++)
for (int j=m;j>=0;j--)
for (int k=g;k>=0;k--){
int t1=j+w[i]; int t2=k+v[i];
if (t1>m||t2>g) continue;
if (f[t1][t2]<f[j][k]+1) f[t1][t2]=f[j][k]+1;
}
printf("%d",f[m][g]); return 0;
}