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;
}