求卡常\剪枝
  • 板块灌水区
  • 楼主xiao__
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/16 20:01
  • 上次更新2023/11/3 09:28:26
查看原帖
求卡常\剪枝
1007419
xiao__楼主2023/7/16 20:01

一本通1268

#include<bits/stdc++.h>
using namespace std;
int m,n,w[105],c[105],w1=0,v1=0,maxi=-1e9;
inline void dfs(int x){
	if(x>n)
	{
		if(w1<=m){
			maxi=max(maxi,v1);
		}
		return;
	}
	for(int i=0;;i++){
		if((w1+w[x]*i)<=m){
			w1+=w[x]*i;
			v1+=c[x]*i;
			dfs(x+1);
			w1-=w[x]*i;
			v1-=c[x]*i;
		}else break;
	}
}
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
inline void write(int x){
    char num[300];int cnt=0;
    if(x==0){putchar('0');return;}
    if(x<0){putchar('-');x=-x;}
    while(x>0){num[cnt++]=x%10+'0';x/=10;}
    while(cnt>0){putchar(num[--cnt]);}return;
}//基本的输入+输出 
int main(){
	m=read();n=read();
	for(int i=1;i<=n;i++){
		cin>>w[i]>>c[i];
	}
	dfs(1);
	putchar('m');
	putchar('a');
	putchar('x');
	putchar('=');
	write(maxi);
	return 0;
}
2023/7/16 20:01
加载中...