宠物小精灵之收服 (二维01背包)
Posted willendless
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宠物小精灵之收服 (二维01背包)相关的知识,希望对你有一定的参考价值。
【题目链接】
http://noi.openjudge.cn/ch0206/4978/
【算法】
做的第一道二维的背包问题,只需开的数组增加一维以正确表述每一个状态即可。本质还是多过程决策+最优子结构+无后效性。
【代码】
1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,m,k,i,j,t,minm; 4 int v[1010],u[510],dp[1010][510]; 5 int main() 6 { 7 scanf("%d%d%d",&n,&m,&k); 8 minm=m; 9 for(i=1;i<=k;i++) scanf("%d%d",&v[i],&u[i]); 10 for(i=1;i<=k;i++) 11 for(j=n;j>=v[i];j--) 12 for(t=m;t>=u[i];t--) 13 dp[j][t]=max(dp[j][t],dp[j-v[i]][t-u[i]]+1); 14 for(i=0;i<=n;i++) 15 for(j=0;j<=m;j++) 16 if(dp[i][j]==dp[n][m]&&j<minm) minm=j; 17 printf("%d %d ",dp[n][m],m-minm); 18 return 0; 19 }
以上是关于宠物小精灵之收服 (二维01背包)的主要内容,如果未能解决你的问题,请参考以下文章