01背包进阶 二维数组/滚动数组 模/滚动数组 异或/一维数组
枚举所有物品能想到,但编写就很困难了。故需寻求01背包固定算法
1.二维数组写法
#include <stdio.h>
int f[35][210],w[35],c[35];
int max(int a,int b){
return a>b?a:b;
}
int main(){
int M,N,i,j;
scanf("%d%d",&M,&N);
for(i=1;i<=N;i++)scanf("%d%d",&w[i],&c[i]);
for(i=1;i<=N;i++)
for(j=0;j<=M;j++){
f[i][j]=f[i-1][j];
if(j>=w[i])f[i][j]=max(f[i][j],f[i-1][j-w[i]]+c[i]);
}
printf("%d\n",f[N][M]);
return 0;
}
2.1滚动数组写法一 模
#include <stdio.h>
#include <string.h>
int w[35],c[35],f[2][210];
int max(int a,int b){
return a>b?a:b;
}
int main(){
int m,n,i,j;
memset(f,0,sizeof(f));
scanf("%d%d",&m,&n)

最低0.47元/天 解锁文章
704

被折叠的 条评论
为什么被折叠?



