AcWing 1022. 宠物小精灵之收服

原题链接

考察:二维费用背包

思路:

       套01背包模板,但是数组范围不要开错,注意N,M,K的位置,记录此题纯粹提醒我自己.....

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 const int N = 1010,M = 510,K = 110;
 6 int s[N],v[N],f[M][N],ans,R;//精灵 当前体积 当前精灵球个数
 7 int main()
 8 {
 9     int n,m,k;
10     scanf("%d%d%d",&k,&m,&n);
11     for(int i=1;i<=n;i++) scanf("%d%d",&s[i],&v[i]);
12     for(int i=1;i<=n;i++)//f[j][k]当前剩余体积,当前剩余精灵球
13       for(int j=m-1;j>=v[i];j--)//体积
14         for(int p=k;p>=s[i];p--)//精灵球
15             f[j][p] = max(f[j][p],f[j-v[i]][p-s[i]]+1);
16     int c = 1;
17     while(c<=m&&f[m-1][k]==f[m-c][k]) c++;
18     printf("%d %d\n",f[m-1][k],c-1);
19     return 0;
20 }

 

posted @ 2021-03-24 01:02  acmloser  阅读(58)  评论(0编辑  收藏  举报