emm本人比你还蒟,只知道可以手动吸氧
by w23c3c3 @ 2018-08-17 19:14:50
@[Fee_cle6418](/space/show?uid=42156) 看了题解知道了:这题用滚动数组,压掉一维,就过了
by w23c3c3 @ 2018-08-17 19:18:17
@[Fee_cle6418](/space/show?uid=42156) 你的代码也可以不开$O_2$过的
by Viston @ 2018-09-11 15:41:28
@[Fee_cle6418](/space/show?uid=42156)
加上读you+输you+register+手写MAX就过了,无需O2优化。
```
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
ll X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
inline void write(ll x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+48);
}
inline int max(int a,int b){
return a>b?a:b;
}
int w[55][55][55],g[55][2505][55],f[55][2505];
char a[55][55];
int main() {
int n,m,t;
n=read(),m=read(),t=read();
for(register int i=1;i<=n;i++){
scanf("%s",a[i]+1);
for(register int j=1;j<=m;j++)
for(register int k=j;k<=m;k++){
int s1=0,s2=0;
for(register int l=j;l<=k;l++)s1+=a[i][l]=='0',s2+=a[i][l]=='1';
w[i][j][k]=max(s1,s2);
}
}
for(register int i=1;i<=n;i++)for(register int j=1;j<=t;j++)
for(register int k=j;k<=m;k++)for(register int p=j-1;p<k;p++)
g[i][j][k]=max(g[i][j][k],g[i][j-1][p]+w[i][p+1][k]);
for(register int i=1;i<=n;i++)
for(register int j=1;j<=t;j++)
for(register int k=1;k<=j;k++)
f[i][j]=max(f[i][j],f[i-1][j-k]+g[i][k][m]);
write(f[n][t]);
return 0;
}
```
by Viston @ 2018-09-11 15:43:44
我觉得你还可以写一篇题解QAQ,绝对比题解区里的dalao玄学
by Viston @ 2018-09-11 15:54:46
有,我的算法复杂度是O(m*m*n)
by Bitoo @ 2023-10-07 20:41:10