1 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=1010; int f[N][N],v[N],m[N]; int main() { int V,M,n; cin>>V>>M>>n; for(int i=1;i<=n;i++) cin>>v[i]>>m[i]; //每个精灵的体积和价值 for(int i=1;i<=n;i++) { for(int j=V;j>=v[i];j--) //二维01背包,倒着枚举 { for(int k=M;k>m[i];k--) { f[j][k]=max(f[j][k],f[j-v[i]][k-m[i]]+1); } } } cout<<f[V][M]<<" "; int k=M; while(k>0&&f[V][M]==f[V][k]) k--; //找到收服个数一定,然后精力最小的一个 cout<<M-k<<endl; return 0; }
- 1
Information
- ID
- 993
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 3
- Accepted
- 3
- Uploaded By