#include<iostream>

#include<cstring>

#include<algorithm>

using namespace std;

int n,m;//n表示有几个物品,m表示背包能装的空间 

int jz[1010],wz[1010];//jz表示物品的价值,wz表示物品所占的空间 


int fun(int x1,int y1)//x1表示枚举到第几个物品,是边界,y1表示背包还剩下多少空间,用来确定这个能不能装

{

if(x1>n) return 0;

else if(y1<wz[x1]) return fun(x1+1,y1);//超过重量不能装,只能考虑下一个

else if(y1>=wz[x1])

{

return max(fun(x1+1,y1-wz[x1])+jz[x1],fun(x1+1,y1));




int main()

{

cin>>n;

cin>>m; 

for(int k=1;k<=n;k++)

{

cin>>wz[k]>>jz[k];

}

int res=fun(1,m);

cout<<res;

 } 

记忆


#include<iostream>

#include<cstring>

#include<algorithm>

using namespace std;

int n,m;//n表示有几个物品,m表示背包能装的空间 

int jz[1010],wz[1010];//jz表示物品的价值,wz表示物品所占的空间 

int f[1010][1010];


int fun(int x1,int y1)//x1表示枚举到第几个物品,是边界,y1表示背包还剩下多少空间,用来确定这个能不能装

{

if(f[x1][y1]) return f[x1][y1];

int sum=0;

if(x1>n) sum=0;

else if(y1<wz[x1]) sum=fun(x1+1,y1);

else if(y1>=wz[x1])

{

sum=max(fun(x1+1,y1-wz[x1])+jz[x1],fun(x1+1,y1));

f[x1][y1]=sum;

return sum;




int main()

{

cin>>m;

cin>>n; 

for(int k=1;k<=n;k++)

{

cin>>wz[k]>>jz[k];

}

int res=fun(1,m);

cout<<res;

 } 


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论