一个骨头收藏家,他有一个体积为m的袋子,他去了坟墓,遇到n个骨头,每个骨头的价值和体积不一样,求他能装骨头的最大价值。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int mm[1005][1005],a[1005],b[1005];//mm保存价值表,a保存价值,b保存体积
int main()
{int t;int n,m;scanf("%d",&t);//输入样例数量for(int i=0; i<t; i++){scanf("%d %d",&n,&m);//输入骨头数目,袋子体积for(int j=1; j<=n; j++)//输入各骨头的价值scanf("%d",&a[j]);for(int j=1; j<=n; j++)//输入各骨头的体积scanf("%d",&b[j]);int x=0,y=0;memset(mm,0,sizeof(mm));for(int i=1; i<=n; i++){for(int j=0; j<=m; j++){if(j>=b[i])/*状态转移方程:if(j>=b[i]){mm[i][j]=max(mm[i-1][j],mm[i-1][j-b[i]]+a[i])}else{mm[i][j]=mm[i-1][j]}*/mm[i][j]=max(mm[i-1][j],mm[i-1][j-b[i]]+a[i]);elsemm[i][j]=mm[i-1][j];}}printf("%dn",mm[n][m]);}return 0;
}
本文发布于:2024-01-28 18:06:49,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064364159270.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |