LOJ 6464 萌萌的RQ
SOL:
我们可以对于 x,y的奇偶性进行讨论。
我们注意到,当x=3的时候,无论y是什么,最优策略肯定是先吃x=2这一行,剩下的一个一个吃。
发现当x为奇数时,都可以采取这样的策略,达到最优解。
记f[x][y]为x行y列的矩形的答案。
f[x][y]=Max(max(f[x][j]+f[x][y-j-1]),max(f[j][y]+f[x-j-1][y]))
不妨令x<y,
有 f[1][y]=y,f[2][y]=2y-(y+1)/2 ,f[3][y]=2*y+1 ,
数归发现f[n][y]<=ny/2+(n-1)/2 (等号在n=2k+1时取到)
#include<bits/stdc++.h> #define mo 1000000007 using namespace std; long long Mo(__int128 x,__int128 y){ __int128 anw=x*y-(x-1)*(y-1)/2; return anw%mo; } long long sao(long long x,long long y){ // cerr<<x<<' '<<y<<endl; if (x==0||y==0) return 0; if (x>y) swap(x,y); if ((x&1)||(y&1)) return Mo(x,y); return (sao(x,y>>1)+sao(x,(y>>1)-1)+1)%mo; } long long x,y; signed main () { scanf("%lld%lld",&x,&y); printf("%lld",sao(x,y)); }