日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hdu4665 DFS

發布時間:2025/6/17 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu4665 DFS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? 給你一個字符串,問你能不能拆成兩個相同的字符串,順序不能改變.
思路:

? ? ? 咋一看數據有點大,搜索過不去,但想想優化的地方很多,而且每個字母最多出現四次,所以多幾個剪紙應該會過.

#include<stdio.h> #include<string.h>#define N 2000 + 10 int ans1[N] ,ans2[N]; int s1[N] ,s2[N] ,s[N]; int num[N] ,now[N] ,n; int ok;bool okk1(int l1 ,int l2 ,int id) {if(s1[num[id]] >= s[num[id]] / 2)return 0;if(l1 >= l2) return 1;else if(num[id] == ans2[l1]) return 1;else return 0; } bool okk2(int l1 ,int l2 ,int id) {if(l2 >= l1) return 1;else if(num[id] == ans1[l2]) return 1;else return 0; }void DFS(int l1 ,int l2 ,int id) {if(ok) return ;if(l1 > n / 2 + 1 || l2 > n / 2 + 1)return; if(l1 == n / 2 + 1 && l2 == n / 2 + 1){ok = 1;return ;} if(okk1(l1 ,l2 ,id) && !ok) {now[id] = 0;ans1[l1] = num[id];s1[now[id]] ++;DFS(l1 + 1 ,l2 ,id + 1);s1[now[id]] --;} if(okk2(l1 ,l2 ,id) && !ok){now[id] = 1;ans2[l2] = num[id];s2[num[id]] ++;DFS(l1 ,l2 + 1 ,id + 1); s2[num[id]] --; } }int main () {int t ,i;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);memset(s ,0 ,sizeof(s));for(i = 1 ;i <= n ;i ++){scanf("%d" ,&num[i]);s[num[i]] ++;s1[i] = s2[i] = 0;}ok = 0;DFS(1 ,1 ,1);for(i = 1 ;i < n ;i ++)printf("%d" ,now[i]);printf("%d\n" ,now[i]);}return 0; }

總結

以上是生活随笔為你收集整理的hdu4665 DFS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。