Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- using namespace std;
- struct a{
- int c;
- int p;
- int q;
- };
- char tab[55][55];
- vector<a> dp[550];
- int cost[55][55];
- int r,s;
- int maxn=100000000;
- bool cmp(a x,a y){
- return x.c<y.c;
- }
- void solve(){
- for(int pos=0;pos<r;++pos){
- for(int i=0;i<52;++i)
- for(int j=i+1;j<52;++j){
- if(i%2==0 && j==i+1) continue;
- if(i%2==j%2) continue;
- a bla;
- bla.c=maxn;
- if(pos==0){
- bla.c=0;
- bla.p=i;
- bla.q=j;
- }
- else{
- for(int k=0;k<51;++k){
- if(dp[pos-1][k].p==i || dp[pos-1][k].p==j || dp[pos-1][k].q==i || dp[pos-1][k].q==j) continue;
- if(dp[pos-1][k].c<bla.c){
- bla.c=dp[pos-1][k].c;
- bla.p=i;
- bla.q=j;
- }
- }
- }
- bla.c+=cost[pos][i]+cost[pos][j];
- dp[pos].push_back(bla);
- }
- sort(dp[pos].begin(),dp[pos].end(),cmp);
- for(int w=0;w<dp[pos].size();++w)
- printf("%d %d %d\n",dp[pos][w].p,dp[pos][w].q,dp[pos][w].c);
- printf("\n");
- }
- }
- int main(void){
- scanf("%d%d",&r,&s);
- for(int i=0;i<r;++i)
- scanf("%s",tab[i]);
- for(int i=0;i<r;++i)
- for(int j=0;j<26;++j){
- int x=0;
- int y=0;
- for(int k=0;k<s;++k){
- if(k%2==0 && tab[i][k]-'a'!=j) ++x;
- if(k%2==1 && tab[i][k]-'a'!=j) ++y;
- }
- cost[i][2*j]=x;
- cost[i][2*j+1]=y;
- }
- /*for(int j=0;j<r;++j){
- for(int i=0;i<7;++i)
- printf("%d ",cost[j][i]);
- printf("\n");
- }*/
- solve();//govno sam pojeo
- printf("%d\n",dp[r-1][0]);
- return 0;
- }
- /*
- 3 5
- ababa
- bbbbb
- babab
- */
Add Comment
Please, Sign In to add comment