青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設(shè)計(jì)空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

基本參數(shù)搜索

Posted on 2008-06-03 15:45 oyjpart 閱讀(3140) 評(píng)論(14)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

上次百度之星第三題竟然不會(huì)做,很是慚愧啊,腦袋生銹了。

后來從HUST上面找了道類似的題目,AC了。


The perfect hamilton path

Time Limit: 5 Sec  Memory Limit: 128 MB
Submissions: 72  Solved: 16

Description

There are N(2 <= N <= 13) cities and M bidirectional roads among the cities. There exist at most one road between any pair of the cities. Along every road, there are G pretty girls and B pretty boys(1 <= G,B <= 1000).
You want to visit every city exactly once, and you can start from any city you want to. The degree of satisfaction is the ratio of the number of the pretty girls to the number of the pretty boys. You want to know the highest degree of satisfation.

Input

There are multiply test cases.
First line: two integers N, M;
The following M lines: every line with four integers i, j, G, B, response that there is a road between i and j with G and B.

Output

The highest degree of the satisfation, rounded to the third place after the decimal point.

Sample Input

3 3
1 2 5 3
2 3 7 4
3 1 13 11

Sample Output

1.714

HINT

Source

dupeng


題目的意思是找到一個(gè)sigma(G)/sigma(B)最大的hamilton回路。
典型的參數(shù)搜索。二分或者迭代答案就可以了。

Solution:

#include <stdio.h>
#include 
<queue>
#include 
<cmath>
using namespace std;

const double EPS = 1e-4;
const int N = 15;
const int M = N * N;

#define Max(a, b) (a
>b?a:b)

inline 
int dblcmp(double a, double b) {
    
if(fabs(a-b) < EPS) return 0;
    
return a < b ? -1 : 1;
}

struct Node 
{
    
int x, mask;
    
double s;
    Node() {}
    Node(
int mm, int xx, double ss) {
        x 
= xx;
        mask 
= mm;
        s 
= ss;
    }
};

int n, m;

double adj[N][N];
int X[M], Y[M], G[M], B[M];

double dp[1<<N][N];

double go(double ans) {
    
int i, j;
    
for(i = 0; i < n; ++i) {
        adj[i][i] 
= 0;
        
for(j = i+1; j < n; ++j) {
            adj[i][j] 
= adj[j][i] = -10e300;
        }
    }
    
for(i = 0; i < m; ++i) {
        adj[X[i]
-1][Y[i]-1= G[i]-ans * B[i];
        adj[Y[i]
-1][X[i]-1= adj[X[i]-1][Y[i]-1];
    }

    
for(i = 0; i < (1<<n); ++i) {
        
for(j = 0; j < n; ++j)
            dp[i][j] 
= -10e100;
    }
    queue
<Node> Q;
    
for(i = 0; i < n; ++i) {
        Q.push(Node(
1<<i, i, 0.0));
        dp[
1<<i][i] = 0;
    }
    
while(Q.size()) {
        
int f = Q.front().mask, x = Q.front().x;
        
double s = Q.front().s;
        
double& d = dp[f][x];
        Q.pop();
        
if(s < d) continue;
        
for(i = 0; i < n; ++i) if((f&(1<<i)) == 0) {
            
if(dp[f|1<<i][i] < s + adj[x][i]) {
                dp[f
|1<<i][i] = s + adj[x][i];
                Q.push(Node(f
|1<<i, i, s + adj[x][i]));
            }
        }
    }

    
double max = -10e100;
    
for(i = 0; i < n; ++i) {
        max 
= Max(max, dp[(1<<n)-1][i]);
    }
    
return max;
}

int main()
{
    
// freopen("t.in", "r", stdin);

    
int i;
    
double ans;
    
while(scanf("%d %d"&n, &m) != EOF) {
        
double min = 2000, max = 0;
        
for(i = 0; i < m; ++i) {
            scanf(
"%d %d %d %d"&X[i], &Y[i], &G[i], &B[i]);
            
if(B[i] < min) min = B[i];
            
if(G[i] > max) max = G[i];
        }
        
double lo = 0, hi = max/min;
        
int ok = 0;
        
for(i = 0; ; ++i) {
            
double mid = lo + (hi-lo)/2;
            
if(dblcmp((ans=go(mid)), 0.0> 0) {
                lo 
= mid;
            } 
else if(dblcmp(ans, 0.0== 0) {
                printf(
"%.3lf\n", mid);
                ok 
= 1;
                
break;
            } 
else {
                hi 
= mid;
            }
        }

        
if(!ok) { int a = 0; a = 1/a; }
    }

    
return 0;
}

 


Feedback

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-04 13:43 by w
你好,這個(gè)程序我看不懂……能講一下思路嗎?

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-04 14:56 by oyjpart
你可以參考《算法藝術(shù)與信息學(xué)競(jìng)賽》303-304頁
3.地震--最有比率生成樹 一節(jié)的解答
和這個(gè)非常類似

就是2分枚舉那個(gè)答案,然后將除的表達(dá)式的權(quán) 轉(zhuǎn)化成+-*表達(dá)式的權(quán),再這個(gè)基礎(chǔ)上求目標(biāo)函數(shù)。 如果目標(biāo)函數(shù) != 0,則枚舉的答案應(yīng)該向使目標(biāo)函數(shù)更接近0的方向取值,

go函數(shù)實(shí)際求的就是最大權(quán)的hamilton回路。用的是基本的壓縮狀態(tài)廣搜。

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-04 15:02 by Surfing
我的解法

#include <stdio.h>

#define N 13

typedef struct _T_AdjNode
{
int nBoys;
int nGirls;
double dRatio;
}TAdjNode;

TAdjNode g_AdjNode[N][N];
int g_Path[2][N];
int g_PathIndex[2] = {0};
double g_dRatio[2] = {0.0};
int nCities, nRoads;

int FindNextNode(int nPathIndex, int nLine)
{
double dRatio = 0;
int nNode = 0;
int i = 0;
int j = 0;
bool bExist = false;

for (j = 0; j < nCities; j++)
{
for (i = 0; i < g_PathIndex[nPathIndex]; i++)
{
if (j == g_Path[nPathIndex][i])
{
bExist = true;
break;
}
}
if (bExist)
{
bExist = false;
continue;
}
if (g_AdjNode[nLine][j].dRatio > dRatio)
{
dRatio = g_AdjNode[nLine][j].dRatio;
nNode = j;
}
}

return nNode;
}

int FindPath(int nPathIndex, int nNode)
{
int nNextNode = 0;
static int nBoys = 0, nGirls = 0;

g_Path[nPathIndex][g_PathIndex[nPathIndex]] = nNode;
g_PathIndex[nPathIndex]++;
if (g_PathIndex[nPathIndex] >= nCities)
{
g_dRatio[nPathIndex] = (double)nGirls / nBoys;
return 0;
}

nNextNode = FindNextNode(nPathIndex, nNode);
nBoys += g_AdjNode[nNode][nNextNode].nBoys;
nGirls += g_AdjNode[nNode][nNextNode].nGirls;
FindPath(nPathIndex, nNextNode);

return 0;
}

int main()
{
int i,j,nGirls,nBoys;
char q = '0';
int nPathIndex = 0;

nCities = nRoads = 0;
i = j = nGirls = nBoys = 0;

printf("Input the number of cities and roads:\n");
scanf("%d %d", &nCities, &nRoads);

if (nCities < 1 || nRoads < 1)
{
return 1;
}

do
{
printf("Input the road index and the number of girls and boys sequentially : "
"from to girls boys\n");
scanf("%d %d %d %d", &i, &j, &nGirls, &nBoys);
getchar();

g_AdjNode[i - 1][j - 1].nBoys = nBoys;
g_AdjNode[i - 1][j - 1].nGirls = nGirls;
g_AdjNode[i - 1][j - 1].dRatio = (double)nGirls / nBoys;
g_AdjNode[j - 1][i - 1].nBoys = nBoys;
g_AdjNode[j - 1][i - 1].nGirls = nGirls;
g_AdjNode[j - 1][i - 1].dRatio = g_AdjNode[i - 1][j - 1].dRatio;

printf("Input finished?(y/n)");
scanf("%c", &q);
getchar();
} while ('y' != q);

//process here
nPathIndex = 0;
for (i = 0; i < nCities; i++)
{
FindPath(nPathIndex, 0);
nPathIndex = g_dRatio[0] <= g_dRatio[1] ? 0 : 1;
g_PathIndex[nPathIndex] = 0;
}

//output the result
nPathIndex = g_dRatio[0] >= g_dRatio[1] ? 0 : 1;
printf("The max ratio is %.3lf\n", g_dRatio[nPathIndex]);\
printf("The best path : \n");
for (i = 0; i < nCities; i++)
{
printf("%d\t", g_Path[nPathIndex][i]);
}
printf("\n");

return 0;
}

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-04 15:10 by Surfing
一點(diǎn)小問題,更正一下

if (g_PathIndex[nPathIndex] >= nCities)
{
g_dRatio[nPathIndex] = (double)nGirls / nBoys;
nGirls = nBoys = 0;
return 0;
}

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-04 17:13 by oyjpart
@Surfing
嘿嘿,謝謝分享

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-05 22:27 by w
多謝,受教了

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-05 23:07 by oyjpart
不謝

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-09 23:54 by richardxx
我做了百度那題,但比賽完才想起我貼的那個(gè)模版有點(diǎn)問題,最后果然只有4.5分,和沒做沒區(qū)別~~

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-10 12:03 by oyjpart
@richardxx
呵呵 進(jìn)復(fù)賽了就可以了不 看我們這種初賽就被水掉的菜菜。。

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-10 20:01 by 小Young
跟著大牛漲經(jīng)驗(yàn)值!

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-10 20:34 by oyjpart
汗。。。
您謙虛了。。。

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-11 19:12 by 小Young
請(qǐng)問這題你用隊(duì)列有什么用途啊?
這題不用隊(duì)列也可以啊.

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-06-11 22:19 by oyjpart
@ 小Young
就是廣搜用的隊(duì)列
不用隊(duì)列你的意思是深搜么?

# re: 基本參數(shù)搜索  回復(fù)  更多評(píng)論   

2008-07-26 06:09 by lengbufang
看看!!!
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品99国产精品酒店日本| 国产精品久久久久91| 国产一区二区0| 久久精品亚洲热| 欧美中文在线视频| **网站欧美大片在线观看| 欧美岛国激情| 欧美日本在线看| 午夜国产一区| 久久精品国产69国产精品亚洲| 狠狠久久综合婷婷不卡| 国产亚洲一本大道中文在线| 久久精品免视看| 蜜臀久久99精品久久久画质超高清 | 亚洲女女做受ⅹxx高潮| 亚洲一区二区三区视频| 国产一区二区三区成人欧美日韩在线观看 | 在线不卡中文字幕| 亚洲一区视频在线观看视频| 亚洲天堂成人在线观看| 尤物视频一区二区| 99在线精品免费视频九九视| 国产亚洲一区二区三区| 亚洲国产另类 国产精品国产免费| 欧美日韩八区| 亚洲日本视频| 亚洲一区在线免费观看| 亚洲成色777777女色窝| 中文一区二区| 亚洲国产精品视频| 亚洲欧美精品伊人久久| 亚洲精品中文字幕女同| 午夜精品视频一区| 日韩亚洲欧美一区| 久久九九久精品国产免费直播| 亚洲美女一区| 久久嫩草精品久久久精品一| 亚洲永久免费视频| 暖暖成人免费视频| 久久久久久婷| 国产精品你懂的在线欣赏| 亚洲日本视频| ●精品国产综合乱码久久久久| 亚洲在线视频网站| 一区二区动漫| 欧美成人一区在线| 美女黄网久久| 好看的亚洲午夜视频在线| 亚洲深夜福利| 这里只有精品在线播放| 免费观看久久久4p| 久久阴道视频| 国产三级精品在线不卡| 亚洲综合视频网| 亚洲一级二级在线| 欧美日韩免费观看一区二区三区| 农村妇女精品| 在线成人www免费观看视频| 亚洲一区二区欧美| 亚洲欧美一区二区原创| 欧美日韩一区二区在线播放| 亚洲人体影院| 99国产精品私拍| 欧美成人小视频| 欧美大片免费| 亚洲欧洲日产国码二区| 麻豆精品视频在线| 欧美肥婆bbw| 亚洲精品乱码视频| 欧美日韩1234| 日韩视频在线观看国产| 亚洲一本大道在线| 国产精品久久久久一区二区三区共 | 久久精品国产免费| 韩国成人福利片在线播放| 午夜在线不卡| 久久综合九色九九| 亚洲激情精品| 欧美精品一区二区三区蜜臀| 亚洲看片免费| 亚洲欧美电影院| 国产欧美日韩在线观看| 欧美专区在线| 欧美国产视频一区二区| 亚洲毛片在线| 欧美午夜片在线免费观看| 亚洲欧美国内爽妇网| 久久婷婷综合激情| 亚洲经典在线看| 欧美日韩日日夜夜| 欧美一区二区三区免费视| 欧美77777| 亚洲视频www| 国内精品久久久久伊人av| 乱人伦精品视频在线观看| 一区二区三区日韩精品视频| 久久久久国产成人精品亚洲午夜| 亚洲激情在线激情| 国产精品欧美精品| 久久久一区二区三区| 亚洲美女尤物影院| 久久亚洲捆绑美女| 在线一区二区视频| 狠狠色噜噜狠狠色综合久| 欧美日韩国产影院| 久久久国产91| 亚洲一区二区三区在线| 欧美国产三级| 欧美在线亚洲在线| 在线一区亚洲| 在线观看视频欧美| 国产精品永久免费在线| 欧美精品久久久久久久| 久久本道综合色狠狠五月| 亚洲区免费影片| 久久亚洲欧美| 欧美一区中文字幕| 日韩午夜三级在线| 在线免费观看成人网| 国产精品视频一区二区高潮| 欧美国产三区| 久久精品国产精品亚洲| 亚洲一区二区在线视频| 亚洲日本成人网| 欧美二区在线| 久久综合电影| 久久精品国产69国产精品亚洲| 一区二区三区四区五区精品视频| 伊人成人在线视频| 国产一二三精品| 国产精品男人爽免费视频1| 欧美日韩国产天堂| 欧美国产大片| 麻豆av一区二区三区久久| 欧美有码在线视频| 性感少妇一区| 亚洲欧美日韩人成在线播放| 性色一区二区三区| 激情久久久久久久| 国产色婷婷国产综合在线理论片a| 国产精品久久久久av免费| 欧美色欧美亚洲高清在线视频| 欧美国产日韩精品| 欧美精品一区二区三区四区| 美国成人毛片| 欧美成人性网| 欧美精品日韩一本| 欧美日本三区| 欧美日韩高清免费| 国产精品久久久久aaaa九色| 国产精品入口夜色视频大尺度| 国产精品日韩| 国产日韩精品久久| 一区二区三区在线看| 在线日本高清免费不卡| 亚洲激情欧美激情| 一区二区三区 在线观看视| 亚洲一二三级电影| 欧美诱惑福利视频| 玖玖综合伊人| 亚洲国产欧美不卡在线观看| 亚洲人成网站色ww在线| 亚洲精选视频在线| 午夜精品国产| 久久亚洲精品一区二区| 欧美精品二区三区四区免费看视频| 欧美日韩国产亚洲一区| 国产精品视频免费观看| 黄色日韩在线| 一本色道久久综合| 欧美一区二区三区免费视| 美女黄毛**国产精品啪啪| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲裸体视频| 午夜精品久久久久久久99黑人| 久久精品91久久久久久再现| 欧美高清在线视频观看不卡| 国产精品欧美激情| 亚洲国产精品久久91精品| 亚洲一区二区三区免费视频| 久久精品男女| 亚洲精选国产| 久久亚洲精品中文字幕冲田杏梨| 欧美视频二区| 国内揄拍国内精品少妇国语| av成人天堂| 久久精品国产视频| 亚洲精品资源| 久久一二三四| 国产精品一区一区三区| 91久久国产综合久久蜜月精品| 欧美亚洲网站| 亚洲伦理在线观看| 久久久久这里只有精品| 国产精品美女久久福利网站| 亚洲精品国产视频| 久久阴道视频| 欧美一区二区三区精品电影| 欧美调教视频| 日韩视频久久|