| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
dfs1A过,注意scanf("\n%c",&c)的\n一定不能掉,否则会把结果输出两次!!!#include <stdio.h>
int tri[6][3];
int sts[6];
int used[6];
int sx[6];
int mxSc;
int zuo(int st){
return st;
}
int you(int st){
return (st+2)%3;
}
int wai(int st){
return (st+1)%3;
}
void dfs(int jd){
if(jd == 0){
for(int i = 0; i < 3; i++){
sts[0] = i;
sx[0] = 0;
dfs(1);
}
}
else if(jd != 5){
for(int i = 1; i < 6; i++){
if(used[i]) continue;
for(int j = 0; j < 3; j++){
if(tri[i][zuo(j)] == tri[sx[jd-1]][you(sts[jd-1])]){
sts[jd] = j;
sx[jd] = i;
used[i] = 1;
dfs(jd+1);
used[i] = 0;
}
}
}
}
else{
for(int i = 1; i < 6; i++){
if(used[i]) continue;
for(int j = 0; j < 3; j++){
if(tri[i][zuo(j)] == tri[sx[4]][you(sts[4])] && tri[i][you(j)] == tri[0][zuo(sts[0])]){
sts[jd] = j;
sx[jd] = i;
int sc = 0;
for(int k = 0; k < 6; k++){
sc += tri[sx[k]][wai(sts[k])];
}
if(sc > mxSc) mxSc = sc;
}
}
}
}
}
void solve(){
//printf("Solving...\n");
mxSc = -1;
for(int i = 0; i < 6; i++) used[i] = 0;
used[0] = 1;
dfs(0);
if(mxSc > 0) printf("%d\n",mxSc);
else printf("none\n");
}
int main(int argc, char **argv){
while(1){
for(int i = 0; i < 6; i++){
for(int j = 0; j < 3; j++){
scanf("%d",&tri[i][j]);
}
}
char c;
scanf("\n%c", &c);
//printf("c=%c\n", c);
solve();
if(c == '$') break;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator