题目链接
发现每行答案分别独立,于是考虑分行做区间dp,最终把每行的答案相加。
状态转移方程(对每一行,l为区间长度):
f [ i ] [ j ] = max ( f [ i + 1 ] [ j ] + a [ i + 1 ] ∗ 2 m − l − 1 , f [我和邻家姐妹的缠绵往事 i ] [ j − 1 ] + a [ j − 1 ] ∗ 2 m − l − 1 ) f[i][j]=\max(f[i+1][j]+a[i+1]*2^{m-l-1},~f[i][j-1]+a[j-1]*2^{m-l-1}) f[i][j]=max(f[i+1][j]+a[i+1]∗2m−l−1,f[i][j−1]+a[j−1]∗2m−l−1)
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=82;int n,m,a[maxn][maxn];struct bigInt{int v[31],size;bigInt(long long x=0) {memt(v,0,sizeof铁骑兵团(v)); size=0; while(x) v[++size]=x%10,x/=10;}void write(){ //输出bigIntif(size==0) {putchar('0'); return;}for(int i=size;i>=1;i--) putchar(v[i]+'0');}bigInt operator+(const bigInt& rhs) {bigInt ans=0;ans.size=max(size,rhs.size);int kk=0;for(int i=1;i水月湾<=ans.size;i++){ans.v[i]化蝶秀=v[i]+rhs.v[i]+kk;kk=ans.v[i]/10;ans.v[i]%=10;}while(kk){ans.v[++ans.size]=kk%10;kk/=10;}return ans;}bigInt operator*(const int rhs){bigInt ans=0;int kk=0;ans.size=size;for(int i=1;i<=ans.size;i++){ans.v[i]=rhs*v[i]+kk;kk=ans.v[i]/10;ans.v[i]%=10;}while(kk){ans.v[++ans.size]=kk%10;kk/=10;}return ans;}bool operator<(const bigInt& rhs)const{ //重载小于号运算符,用于max函数比较if(size!=rhs.size) return size<rhs.size;for(int i=size;i>=1;i--)if(rhs.v[i]!=v[i]) return v[i]<rhs.v[i];return fal;}} f[maxn][maxn][maxn],pow2[maxn];int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);}pow2[0]=1;for(int i=1;i<=m+1;i++) pow2[i]=pow2[i-1]*2;for(int p=1;p<=n;p++){ //对每一行分别dpfor(int l=m;l>=0;l--){常用不等式 //枚举区间长度for(int i=1,j=i+l;i<=m&&j<=m;i++,j++) //枚举左右区间f[p][i][j]=max(f[p][i][j+1]+pow2[m-l-1]*a[p][j+1],f[p][i-1][j]+pow2[m-l-1]*a[p][i-1]);}}bigInt ans=0; //最终答案for(int i=1;i<=n;i++){bigInt cur=0; //每行的答案for(int j=1;j<=m;j++)cur=max(cur,f[i][j][j]+pow2[m]*a[i][j]);ans=ans+cur;}ans.write();putchar('\n');return 0;}
本文地址:https://blog.csdn.net/u013978102/article/details/107873344
本文发布于:2023-04-04 02:16:41,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/10f184a341081c03f4ddbaf5b99314ba.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:[NOIP2007] 矩阵取数游戏——区间dp+高精.doc
本文 PDF 下载地址:[NOIP2007] 矩阵取数游戏——区间dp+高精.pdf
留言与评论(共有 0 条评论) |