<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【題解】Luogu P7171 [COCI2020-2021#3] Selotejp

      注:題解中 \(\operatorname{lsh}\)\(\operatorname{rsh}\)\(\operatorname{or}\) 分別表示按位左移、按位右移、按位或,即 c++ 語言中的 <<>>|

      我也是打上輪廓線 DP 了。

      \(f_{x,y,S}\) 表示當前在 \((x,y)\) 格子,前 \(m\) 個格子的狀態為 \(S\) 時的最小花費。

      這里的狀態是指,這一格豎著覆蓋為 \(1\),橫著覆蓋或本來就不用覆蓋為 \(0\)

      這里的前 \(m\) 個格子如下圖所示,假設 \(m=4\),當前在 \((2,2)\),方格內的數表示在 \(S\) 中從低到高的下標(從 \(0\) 開始):

      它就是一個逐行遍歷矩陣的順序,注意是包括 \((x,y)\) 這一格的。

      為什么要這樣記錄呢,因為存在豎著覆蓋,如剛才的例子,\((2,2)\) 的下一個為 \((2,3)\),它的上面是 \((1,3)\),剛好被記錄了狀態。

      于是轉移其實不難想:

      • 下一位 \((nx,ny)\)#
        • 橫著覆蓋,判斷左邊有沒有點,且這個點是不是橫著覆蓋的,即 \(f_{nx,ny,S\operatorname{rsh}1}\)\(f_{x,y,S}\)\(f_{x,y,S}+1\) 轉移。
        • 豎著覆蓋,判斷上面的點是不是豎著覆蓋的,即 \(f_{nx,ny,(S\operatorname{rsh}1)\operatorname{or}(1\operatorname{lsh}(m-1))}\)\(f_{x,y,S}\)\(f_{x,y,S}+1\) 轉移。
      • 下一位為 .,直接讓 \(f_{nx,ny,S\operatorname{rsh}1}\)\(f_{x,y,S}\) 轉移。

      復雜度 \(O(nm2^m)\)

      #include<bits/stdc++.h>
      #define ll long long
      #define il inline
      #define read(x){\
      	char ch;\
      	int fu=1;\
      	while(!isdigit(ch=getchar()))\
      		fu-=(ch=='-')<<1;\
      	x=ch&15;\
      	while(isdigit(ch=getchar()))\
      		x=(x<<1)+(x<<3)+(ch&15);\
      	x*=fu;\
      }
      
      using namespace std;
      namespace asbt{
      namespace cplx{bool begin;}
      const int maxn=(1<<10)+5;
      const int inf=0x3f3f3f3f;
      int n,m,f[maxn][15][maxn];
      char s[maxn][15];
      il void upd(int &x,int y){
      	x=min(x,y);
      }
      namespace cplx{
      	bool end;
      	il double usdmem(){return (&begin-&end)/1048576.0;}
      }
      int main(){
      	read(n)read(m);
      	for(int i=1;i<=n;i++){
      		scanf(" %s",s[i]+1);
      	}
      	memset(f,0x3f,sizeof f);
      	if(s[1][1]=='#'){
      		f[1][1][0]=f[1][1][1<<(m-1)]=1;
      	}
      	else{
      		f[1][1][0]=0;
      	}
      	for(int x=1;x<=n;x++){
      		for(int y=1;y<=m;y++){
      			for(int S=0,nx,ny;S<1<<m;S++){
      				if(f[x][y][S]>=inf){
      					continue;
      				}
      				nx=x+y/m;
      				ny=y%m+1;
      				if(s[nx][ny]=='#'){
      					if(ny>1&&(S>>(m-1)&1)==0&&s[x][y]=='#'){
      						upd(f[nx][ny][S>>1],f[x][y][S]);
      					}
      					else{
      						upd(f[nx][ny][S>>1],f[x][y][S]+1);
      					}
      					if(nx>1&&(S&1)){
      						upd(f[nx][ny][S>>1|1<<(m-1)],f[x][y][S]);
      					}
      					else{
      						upd(f[nx][ny][S>>1|1<<(m-1)],f[x][y][S]+1);
      					}
      				}
      				else{
      					upd(f[nx][ny][S>>1],f[x][y][S]);
      				}
      			}
      		}
      	}
      	int ans=inf;
      	for(int S=0;S<1<<m;S++){
      		ans=min(ans,f[n][m][S]);
      	}
      	printf("%d",ans);
      	return 0;
      }
      }
      int main(){return asbt::main();}
      
      posted @ 2025-01-02 14:03  zhangxy__hp  閱讀(15)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 四虎国产精品成人| 免费无码成人AV片在线 | av高清无码 在线播放| 在线免费观看毛片av| 国产精品久久蜜臀av| 中文字幕亚洲人妻一区| 亚洲精品成人一二三专区| 少妇人妻偷人精品视蜜桃| 亚洲日本欧美日韩中文字幕| 亚洲精品国产熟女久久久| 青青青青久久精品国产| 国产精品美女www爽爽爽视频| 国产欧美另类精品久久久 | 亚洲色成人网站www永久下载| 国产第一页浮力影院入口| 国产成人av免费网址| 亚洲无av在线中文字幕| 太保市| 91国产自拍一区二区三区| 国产按头口爆吞精在线视频| 旬邑县| 亚洲色婷婷综合久久| 国产99在线 | 亚洲| 国产午夜伦鲁鲁| 九九热精品在线视频观看| 国产精品欧美福利久久| 久久精品无码精品免费专区| 久久久无码精品亚洲日韩蜜桃| 国产AV影片麻豆精品传媒| 灵宝市| 精品国精品国自产在国产| 久章草在线毛片视频播放| 国产精品久久久久久久久久久久| h无码精品动漫在线观看| 国产一区二区四区不卡| 在线看片免费人成视频久网| 亚洲性av网站| 亚洲无码在线免费观看| 99精品国产综合久久久久五月天| 龙口市| 午夜福利精品国产二区|