1 条题解
-
1
二维
#include<bits/stdc++.h> using namespace std; const int N=51000,M=30; int n,m; long long p[M],v[M]; long long dp[M][N]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%lld%lld",&v[i],&p[i]); p[i]*=v[i]; } for(int i=1;i<=m;i++){ for(int j=0;j<=n;j++){ dp[i][j]=dp[i-1][j]; if(j>=v[i]) dp[i][j]=max(dp[i-1][j-v[i]]+p[i],dp[i][j]); } } printf("%lld\n",dp[m][n]); return 0; }一维(滚动优化)
#include<bits/stdc++.h> using namespace std; const int N=51000,M=30; int n,m; long long p[M],v[M]; long long dp[N]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%lld%lld",&v[i],&p[i]); p[i]*=v[i]; } for(int i=1;i<=m;i++){//遍历物品 for(int j=n;j>=v[i];j--){//遍历预算 dp[j]=max(dp[j-v[i]]+p[i],dp[j]); } } printf("%lld\n",dp[n]); return 0; }
- 1
信息
- ID
- 121
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 176
- 已通过
- 42
- 上传者