#include#includeac思路(dfs+剪枝):dfs最重要的就是建立搜尋樹,這裡每個點都有兩種狀態,如果直接暴力時間肯定很長,所以需要加上剪枝,我們可以將村子的住戶還有備用郵局看作是兩個集合,就像普利姆的思路一樣,總的思路就是更新最短距離陣列,我們先將所有的點全部連線在第乙個備用郵局,也可以不連第乙個,畢竟每個點有兩種狀態,如果第二個備用郵局到住戶的距離足以更新最短距離陣列,那就更新之後尋找下乙個郵局,如果不足以更新最短距離陣列,我們就直接放棄這個點,顯然他是沒有用的,找到k個郵局之後就判定一下話費,是否更短,如果是,更新序號陣列#include
#include
#include
#include
using
namespace
std;
const
int inf = 0xfffffff
; const
int maxn = 51
;int
n,m,k;
struct
node
node(
int _x,int _y)
};set
p[26
];node person[
51],post[26
];double d[26
];bool canuse[26
];void
test()
}double dis(int index1,int
index2)
int findminpost(int index) //
找到最近的郵局的編號(可用的郵局)
}
}return
u; }
int main(void
)
for(int i=0;i)
for(int i=0;i)
for(int i=0;i)
}//test
test();
for(int i=0;i//
刪除m-k個郵局
else
if(p[j].size()==min)}}
canuse[u]=false
;
for(set
::iterator it=p[u].begin(); it != p[u].end();it++)
test();
printf(
"\n\n");
}for(int i=0;i)
if(canuse[i]) printf("
%d ",i+1
);
return
0;
}
[cpp] view plaincopyprint?#include
#include
#include
using
namespace
std;
int n,m,k,j,c[55][2],y[27][2],d[12],f1,f2,f[55]=;
float yc[27][55],s=1000000000
; int dfs(int t,int i,int o[12],float w[55],float
sum)
} else
if(i<=m&&t}
} else
} if(f1&&f2)
else
dfs(t+1,i+1
,o,ww,sum);
} }
} } int
main()
dfs(
0,1,o,w,0
);
for(i=0;i)
cout
<"
";
return
0;
}
/*#include#includeusing namespace std;
int main()
; sort(a,a+6);
do
; sort(a,a+6
);
reverse(a,a+6
);
dowhile(prev_permutation(a,a+6
));
return
0;
}
鞏固練習3
1.新建使用者組,shengchan,caiwu,jishu 2.新建使用者要求如下 1 adminsc 的初始組為shengchan 2 admincw的初始組為caiwu 3 adminjs的初始組為jishu 4 tem 是shengchan組的附加使用者 5 harry是caiwu組的附加使...
基礎練習3
問題描述 利用字母可以組成一些美麗的圖形,下面給出了乙個例子 abcdefg babcdef cbabcde dcbabcd edcbabc 這是乙個5行7列的圖形,請找出這個圖形的規律,並輸出乙個n行m列的圖形。輸入格式 輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。輸出格式 ...
編碼練習3
1 隨機函式random的6個常用知識點 練習 將字串中的boy替換成m 習題1 將字串 k 1 k1 2 k2 3 k3 4 處理成字典 演算法1 1 生成乙個空字典來存結果 2 用split拆開字串,生成乙個列表 3 遍歷這個列表,再用 拆開,分別獲取k和1 4 存到乙個字典裡面 將字典拼回字串...