求解,这是什么操作,加了个宏定义突然就过了

P1005 [NOIP2007 提高组] 矩阵取数游戏

建议把代码放出来= =
by _SAR_ @ 2020-05-12 16:43:08


```cpp #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<string> #include<cstdio> #include<vector> #include<map> #include<set> #include<stack> #include<queue> #define rep(i,a,n) for (int i=a;i<=n;i++) #define rev(i,n,a) for (int i=n;i>=a;i--) #define INF 2147483647 #define ll long long #define mod(a,b,m) (a%m)*(b%m)%m #define lowbit(a) a&(-a) #define err cout<<"error"<<endl; #define o(a) cout<<a<<endl; #define r(a) cout<<a<<' '; #define int128 __int128 #define int __int128//唯一区别 using namespace std; inline int128 read() { char c=getchar();int128 x=0,f=1; for(;!isdigit(c);c=getchar())if(c=='-')f=-1; for(;isdigit(c);c=getchar())x=x*10+c-48; return x*f; } inline void print(int128 x){if(x>9) print(x/10);putchar(x%10+48);} int n,m,a[100][100]; int128 ans,dp[82][82],pw[100]; int128 ksm(int x,int y) { if(y==1)return x; if(y==0)return 1; int128 ans=1; if(y%2){ans=x;y--;} x=x*x; y/=2; return ans*ksm(x,y); } int128 DP(int x,int y,int line) { if(dp[x][y])return dp[x][y]; if(x==y)return a[line][x]*pw[m-(y-x)]; dp[x][y]=max(DP(x+1,y,line)+a[line][x]*pw[m-(y-x)],DP(x,y-1,line)+a[line][y]*pw[m-(y-x)]); return dp[x][y]; } signed main() { n=read();m=read(); rep(i,1,max(n,m)) pw[i]=ksm(2,i); rep(i,1,n) rep(j,1,m) a[i][j]=read(); rep(i,1,n) { memset(dp,0,sizeof(dp)); ans+=DP(1,m,i); } print(ans); return 0; } ```
by Ocean丶 @ 2020-05-12 16:46:25


md,我知道了,快速幂写糊了,忘加int128了
by Ocean丶 @ 2020-05-12 16:52:50


|