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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ2718【DFS】

發(fā)布時(shí)間:2024/7/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ2718【DFS】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意:
給你0到9之間的數(shù),然后讓你搞成兩個(gè)數(shù),求一個(gè)最小差異值(被組合的數(shù)不允許出現(xiàn)前導(dǎo)0)
思路:最小差異那么肯定是有一個(gè)整數(shù)長n/2,另一個(gè)長n-n/2,搜一下就好了。

code:

#include<cstdio> #include<string.h> #include<iostream> #include<algorithm> using namespace std;next_permutation(first,end); 按照字典序列,搞出比他下面的那些排列/* int main() {int a[3];for(int i=0;i<3;i++)cin>>a[i];while(next_permutation(a,a+3)){for(int i=0;i<3;i++){printf("%d",a[i]);}puts("");} } */#define INF 0X3f3f3f3f int a[15]; bool vis[15]; int b[15]; int n; int ans; char s[1010];//另一半直接搞全排列,然后直接判斷取小就行了 void solve(int aa) {int len=0;int bb;for(int i=0; i<n; i++){if(!vis[i]){b[len++]=a[i];}}bb=0;for(int i=0; i<len; i++)bb=bb*10+b[i];sort(b,b+len);if(len==1||b[0]!=0)ans=min(abs(bb-aa),ans);while(next_permutation(b,b+len)){bb=0;for(int i=0; i<len; i++)bb=bb*10+b[i];if(len==1||b[0]!=0)ans=min(abs(bb-aa),ans);} }//先搜出一個(gè)數(shù); void DFS(int k,int res) {if(k==n/2){solve(res);return;}for(int i=0; i<n; i++){if(!vis[i]){if(a[i]==0&&k==0&&n>3)continue;vis[i]=1;DFS(k+1,res*10+a[i]);vis[i]=0;}} } //兩個(gè)輸入方式 void made1() {gets(s);n=0;int len=strlen(s);for(int i=0; i<len; i++){if(s[i]==' ')continue;else{a[n++]=s[i]-'0';//printf("%d ",a[n-1]);}} } void made2() {n=0;char ch;while((ch=getchar())!='\n'){if(ch==' ')continue;a[n++]=ch-'0';} }int main() {int T;scanf("%d",&T);getchar();while(T--){//made1();made2();memset(vis,0,sizeof(vis));ans=INF;DFS(0,0);printf("%d\n",ans);}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/keyboarder-zsq/p/5934504.html

總結(jié)

以上是生活随笔為你收集整理的POJ2718【DFS】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。