01背包40分求调
查看原帖
01背包40分求调
1189308
lilynan楼主2024/5/28 17:53

用01背包做的,只拿了40分

#include<bits/stdc++.h>
using namespace std;
int n,m;
int u[30],w[30],a[30];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++)
		scanf("%d%d",&u[i],&w[i]);
	int res=0;
	while(a[m]==0){
		a[1]++;
		for(int i=0;i<m;i++){
			if(a[i]>1){
				a[i+1]++;
				a[i]=0; 
			}
		}
		int money=0,num=0,sum=0;
		for(int i=0;i<m;i++){
			if(a[i]==1){
				money+=u[i]*w[i];
				num+=w[i];
				sum+=u[i];
			}
		}
		if(sum<=n){
			res=max(res,money);
		}
	}
	printf("%d\n",res);
	return 0;
}
2024/5/28 17:53
加载中...