比赛 20140425 评测结果 AAAAAATTTT
题目名称 积木游戏 最终得分 60
用户昵称 cstdio 运行时间 5.145 s
代码语言 C++ 内存使用 2.44 MiB
提交时间 2014-04-25 12:07:27
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<fstream>
  6. #include<vector>
  7. using namespace std;
  8. const int SIZEN=65,INF=0x7fffffff/2;
  9. int N,M,K;
  10. int board[SIZEN][SIZEN]={0};
  11. int linepre[SIZEN][SIZEN]={0};
  12. int f[2][SIZEN][SIZEN][SIZEN]={0};
  13. void DP(void){
  14. int ans=0;
  15. memset(f[0],0,sizeof(f[0]));
  16. for(int i=1;i<=N;i++){
  17. int ps=(i&1);
  18. memset(f[ps],0,sizeof(f[0]));
  19. //for(int i=1;i<=N;i++) cout<<linepre[1][i]<<" ";cout<<endl;
  20. for(int j=1;j<=M;j++){
  21. for(int k=j;k<=M;k++){
  22. for(int nm=1;nm<=min(M*N-K,i*M);nm++){
  23. for(int j1=1;j1<=M;j1++){
  24. if(j1>k) continue;
  25. for(int k1=j1;k1<=M;k1++){
  26. if(k1<j) continue;
  27. if(i>=2&&nm-(k-j+1)-(k1-j1+1)<i-2) continue;
  28. if(i==1&&nm-(k-j+1)<0) continue;
  29. //if(nm-(k-j+1)<0) continue;
  30. f[ps][j][k][nm]=max(f[ps][j][k][nm],f[ps^1][j1][k1][nm-(k-j+1)]+linepre[i][k]-linepre[i][j-1]);
  31. //if(f[ps][j][k][nm]==7+16) cout<<i<<" "<<j<<" "<<k<<" "<<nm<<" "<<f[ps][j][k][nm]<<endl;
  32. //if(i==1) cout<<i<<" "<<j<<" "<<k<<" "<<nm<<" "<<f[ps][j][k][nm]<<endl;
  33. }
  34. }
  35. //cout<<i<<" "<<j<<" "<<k<<" "<<nm<<" "<<f[ps][j][k][nm]<<endl;
  36. if(nm==M*N-K) ans=max(ans,f[ps][j][k][nm]);
  37. }
  38. }
  39. }
  40. }
  41. printf("%d\n",ans);
  42. }
  43. void read(void){
  44. scanf("%d%d%d",&N,&M,&K);
  45. for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) scanf("%d",&board[N+1-i][j]);
  46. for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) linepre[i][j]=linepre[i][j-1]+board[i][j];
  47. //for(int i=1;i<=M;i++) cout<<linepre[1][i]<<" ";cout<<endl;
  48. }
  49. int main(){
  50. freopen("bricka.in","r",stdin);
  51. freopen("bricka.out","w",stdout);
  52. int T,kase=0;
  53. scanf("%d",&T);
  54. while(T--){
  55. read();
  56. printf("Case %d:",++kase);
  57. DP();
  58. }
  59. return 0;
  60. }