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 }