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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【dfs】数字

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【dfs】数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意

給出x,問你不小于x,且由相同個數的4和7組成的最小的數


解題思路

對于奇數位和大于當前位數最大數的直接特判掉

對于其他的dfs枚舉,因為如果一個位置放得比原數大,那么后面的都確定了,所以是O(n)的


code

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 100100 using namespace std; int n,pp,a[N]; char s[N]; bool dfs(int x,int num1,int num2) {if(x>n) return true;if(s[x]<'4'&&num1){//比原數大,那么后面直接貪心放最小的a[x]='4';num1--;for(int i=x+1;i<=n;++i)if(num1)a[i]='4',num1--;else a[i]='7',num2--;return true;}if(s[x]=='4'&&num1){a[x]='4';if(dfs(x+1,num1-1,num2))//嘗試匹配return true;}if(s[x]<'7'&&num2){a[x]='7';num2--;for(int i=x+1;i<=n;++i)if(num1)a[i]='4',num1--;else a[i]='7',num2--;return true;}if(s[x]=='7'&&num2){a[x]='7';if(dfs(x+1,num1,num2-1))return true;}return false; } int main() {while(~scanf("%s",s+1)){n=strlen(s+1);if(n&1){for(int i=1;i<=(n+1)/2;++i)putchar('4');for(int i=1;i<=(n+1)/2;++i)putchar('7');putchar(10);}else{pp=0;for(int i=1;i<=n/2;++i)if(s[i]>'7'){pp=1;break;}else if(s[i]<'7'){pp=2;break;}if(!pp){for(int i=n/2+1;i<=n;++i)if(s[i]>'4'){pp=1;break;}else if(s[i]<'4'){pp=2;break;}}if(!pp){for(int i=1;i<=n/2;++i)putchar('7');for(int i=1;i<=n/2;++i)putchar('4');putchar(10);}else if(pp==1){for(int i=1;i<=n/2+1;++i)putchar('4');for(int i=1;i<=n/2+1;++i)putchar('7');putchar(10);}else{if(dfs(1,n/2,n/2)){for(int i=1;i<=n;++i)putchar(a[i]);putchar(10);}}}}return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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