3 条题解
-
2
#include <cstdio> #include <cstring> const int N=1010; int max(int x,int y){return x>y?x:y;} int n,m,p; int f[N][N],cost[N],q[N][N],loc[N][N],l[N],r[N],add[N],dp[N]; int get(int i,int j) { return ((j-i)%n+n)%n; } int main() { scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&f[j][i]); f[j][i]+=f[j-1][i-1]; } for(int i=0;i<n;i++) { scanf("%d",cost+i); q[i][++r[i]]=-cost[i],l[i]++; } memset(dp,-0x3f,sizeof(dp)); dp[0]=0; for(int i=1;i<=m;i++) { for(int j=0;j<n;j++) { int id=get(i,j); while(l[id]<=r[id]&&loc[id][l[id]]+p<i) l[id]++; if(!j) add[id]+=f[i][n]; if(l[id]<=r[id]) dp[i]=max(dp[i],q[id][l[id]]+add[id]+f[i][j]); } for(int j=0;j<n;j++) { int id=get(i,j); int tmp=dp[i]-add[id]-f[i][j]-cost[j]; while(l[id]<=r[id]&&q[id][r[id]]<=tmp) r[id]--; loc[id][++r[id]]=i; q[id][r[id]]=tmp; } } printf("%d\n",dp[m]); return 0; }
-
-2
写题解请注意
鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1621
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 17
- 已通过
- 16
- 上传者