SRM 531 SutTheBumbers

来源:互联网 发布:windows不激活 编辑:程序博客网 时间:2024/05/19 23:13

【分析】
一开始是直接想到用贪心的,因为样例是完全可以过的(要么全是横的,要么全是竖的)。不过在用大数据跑的时候就发现了问题。贪心不行,难道我们真的要模拟怎么分割这个矩形吗?不说复杂度,关键是不会模拟啊。最后将目光聚集到小方块上,一个方块的状态其实只有横着的或竖着的,也就是0、1序列。这就想到了状压。接下来就是模拟的事情了。

【代码】

bool mk[6][6];class CutTheNumbers {public:    int maximumSum(vector <string> a) {        int n=a.size();        int m=a[0].length();        int ans=0;        int i,j,p,q;        for(p=0;p<(1<<(n*m));p++){                int an=0;                memset(mk,0,sizeof(mk));                for(i=0;i<n;i++){                    for(j=0;j<m;j++){                        if(mk[i][j])continue;                        if((1<<(i*m+j))&p){//是横着的                            int w=0;                            for(q=j;q<m&&!mk[i][q];q++){                                if((1<<(i*m+q))&p){                                    w=w*10+a[i][q]-'0';                                    mk[i][q]=1;                                }                                else break;                            }                            an+=w;                        }                        else{                            int w=0;                            for(q=i;q<n&&!mk[q][j];q++){                                if(!(((1<<(q*m+j))&p))){                                    w=w*10+a[q][j]-'0';                                    mk[q][j]=1;                                }else break;                            }                            an+=w;                        }                    }                }                ans=max(ans,an);        }        return ans;    }};
2 0
原创粉丝点击