120565F

https://ac.nowcoder.com/acm/contest/120565/F

(诡异的🔑)

贪心+dp

因为种情况的最小公倍数是,所以前段暴力填充,贪心取最优,后续dp处理。但是如果最后只剩下的话,如果填的是的,那么后面再加凑成的情况处理不了,于是要多留出一段来处理这种情况。

#include<bits/stdc++.h>
using namespace std;
__int128 read(){
	char ch=getchar();__int128 x=0,f=1;
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
void sc(__int128 x){
	if(x>9) sc(x/10);
	putchar(x%10+'0');
}
void work(){
	__int128 n=read(),a=read(),b=read(),ans=0;
	__int128 x=n/56;
	ans=max(x*8*a,max(x*28*b,x*(a+b)*7));
	x=n%56;
	__int128 f[110];memset(f,-0x3f3f3f3f,sizeof(f));
	f[0]=0;
	for(__int128 i=1;i<=x;i++){
		if(i>=2){
			f[i]=max(f[i-2]+b,f[i]);
		}
		if(i>=7){
			f[i]=max(f[i-7]+a,f[i]);
		}
		if(i>=8){
			f[i]=max(f[i-8]+a+b,f[i]);
		}
	}
	if(f[x]>0) ans+=f[x];
	sc(ans);
	putchar('\n'); 
}
int main(){
	int t=read();
	while(t--){
		work();
	}
	return 0;
} 
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务