题解 | #矩阵消除游戏#
矩阵消除游戏
https://ac.nowcoder.com/acm/problem/200190
枚举题 每行选或者不选,很容易想到二进制枚举
。。。就是调试要很久
#include<iostream> #include<algorithm> using namespace std; int n,m,k,ans,ans2=0; int a[20][20],b[20][20]; bool cmp(int a,int b) { return a>b; } void init() { cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>b[i][j]; } int main() { init(); if(k>=min(n,m)) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans+=b[i][j]; cout<<ans<<endl; return 0; } for(int i=0;i<1<<n;i++) { ans=0; int now=0; for(int ii=1;ii<=n;ii++) for(int j=1;j<=m;j++) a[ii][j]=b[ii][j]; for(int j=0;j<n;j++) { if(i>>j&1) { now++; for(int kk=1;kk<=m;kk++) ans+=a[j+1][kk],a[j+1][kk]=0; } } if(now>k)continue; int sum[20]={0}; for(int j=1;j<=n;j++) for(int kk=1;kk<=m;kk++) sum[kk]+=a[j][kk]; sort(sum+1,sum+1+m,cmp); for(int ii=1;ii<=k-now;ii++) ans+=sum[ii]; ans2=max(ans2,ans); } cout<<ans2<<endl; }