矩阵消除计划
作者:互联网
01串枚举行,贪心列
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[20][20],b[20],sh[20],sl[20]; int n,m,k; long long ans=0; int deal(int x) { memset(b,0,sizeof(b)); int i=1,cnt=0; while(x) { if(x&1) { cnt++; b[i]=1; } x>>=1; i++; } return cnt; } int main() { scanf("%d %d %d",&n,&m,&k); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); sh[i]+=a[i][j]; } } if(k>n) k=n; if(k>m) k=m; for(int T=0;T<=((1<<n)-1);T++) { long long temp=0; int numh=deal(T); int numl=k-numh; if(numh>=0&&numh<=n&&numl>=0&&numl<=m) { for(int i=1;i<=n;i++) { if(b[i]) temp+=sh[i]; } memset(sl,0,sizeof(sl)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(!b[i]) sl[j]+=a[i][j]; } } sort(sl+1,sl+m+1); for(int i=m;i>=1&&numl;i--) { temp+=sl[i]; numl--; } ans=max(ans,temp); } else continue; } printf("%lld\n",ans); }
标签:cnt,20,int,矩阵,计划,&&,ans,include,消除 来源: https://www.cnblogs.com/aacm/p/15035158.html