首页 > 编程知识 正文

ue4背包系统,游戏背包系统

时间:2023-05-06 16:53:35 阅读:22353 作者:2256

背包概述主题说明:

给出n个物品(一个物品可以多次选择,没有限制),背包的最大承受负荷为m,一个物品具有一个重量w,一个价值v。 如何选择才能使选定项目的价值总和最大化,而重量不超过m?

输入格式:

第一行:两个正整数n,m。

第2 () n1 )行:每行两个正整数w和v。

输出格式:

一个整数,最大价值的总和是多少?

输入示例:

6 124 86 102 62 35 71 2输出示例:

36解决方法完全背包与零一背包很相似。 只是,零件背包中的一个道具,是选择还是不选择。 选择完整背包的次数没有限制。

如果你还没有学过零背包,可以在这个网站上先学习https://blog.csdn.net/skeleton king 233/article/details/948936006

那我们该怎么办呢? 在零一背包的文章中,还记得我用一维数组解法模块写的后效果吗? 在零背包中,为了避免多项选择,采用了从m到w[i]反向循环的方式,没有后效性。 现在正好相反,需要这样的后效性,所以我们只要从我w[i]循环到m就可以了。

代码如下所示,只需解开一维数组,一包一包地在该代码中翻转双重循环。

(PS:NR是指物品个数的上限,MR是指重量的上限) ) ) ) )。

# include cstdio # include iostream # include cmath # include cstring # includealgorithmusingnamespacestd; #定义for (I,a,b ) for ) intI=a; i=b; I ) #define_for(I,a,b ) for ) intI=a; i=b; I--; constintNR=100000,MR=100000000; int n,m; int w[NR 10],v[NR 10]; int dp[MR 10]; int main () Scanf ) ' %d%d ',n,m ); for(I,1,n ) scanf ) ' %d%d ',w[i],v[i] ); for(I,1,n ) for(j,w ) I,m ) DP ) j )=max ) DP(j ),DP(j-w ) I ) ) I ) ); printf(%d(n ),dp[m]; 返回0; } God Bless You For Ever!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。