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

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 閱讀(3153) 評(píng)論(14)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

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

后來(lái)從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頁(yè)
3.地震--最有比率生成樹(shù) 一節(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)小問(wè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)問(wèn)題,最后果然只有4.5分,和沒(méi)做沒(méi)區(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)問(wèn)這題你用隊(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>
            狠狠色综合日日| 老司机精品久久| 亚洲香蕉成视频在线观看| 日韩亚洲欧美高清| 正在播放日韩| 亚洲欧美三级在线| 久久久久久久一区二区| 欧美成人激情视频免费观看| 亚洲国产日韩一区| 亚洲精品免费一区二区三区| 亚洲视频一区二区| 亚洲香蕉视频| 欧美+日本+国产+在线a∨观看| 欧美精品久久一区二区| 国产亚洲人成网站在线观看| 亚洲理论电影网| 蜜桃久久精品乱码一区二区| 亚洲欧美日韩国产综合精品二区| 免费日韩精品中文字幕视频在线| 亚洲级视频在线观看免费1级| 久久成人国产| 一本色道久久综合亚洲精品小说| 久久久国产亚洲精品| 欧美日韩卡一卡二| 国产一区香蕉久久| 亚洲自啪免费| 日韩亚洲欧美一区二区三区| 久久久国产精品一区| 一区二区毛片| 久久久久这里只有精品| 国产欧美亚洲一区| 亚洲午夜一区二区三区| 欧美一区2区视频在线观看| 国产精品伦子伦免费视频| 日韩亚洲不卡在线| 午夜国产欧美理论在线播放| 亚洲日本在线观看| 欧美一区二区精美| 宅男精品视频| 美女精品在线观看| 亚洲国产精品精华液网站| 久久综合九色九九| 久久露脸国产精品| 亚洲欧美第一页| 亚洲欧美日韩区| 中文av一区二区| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲欧美亚洲| 欧美视频在线观看一区| 亚洲一区二区视频| 欧美插天视频在线播放| 99re6这里只有精品视频在线观看| 欧美亚洲一区二区在线| 校园激情久久| 久久伊人一区二区| 影音先锋日韩资源| 亚洲人成网站影音先锋播放| 欧美激情国产日韩精品一区18| 一区二区精品国产| 欧美成人免费全部| 农村妇女精品| 在线播放不卡| 久久国产66| 亚洲免费观看在线观看| 免费在线观看日韩欧美| 欧美大片18| 欧美日韩一区综合| 日韩一级在线观看| 亚洲综合色在线| 国产精品久久国产精麻豆99网站| 久久久久国产精品人| 国产日韩欧美成人| 欧美.www| 亚洲品质自拍| 香蕉久久久久久久av网站| 91久久黄色| 欧美黄色一区| 一本色道久久综合亚洲精品按摩 | 国产亚洲福利一区| 香港久久久电影| 免播放器亚洲| 亚洲欧洲日本在线| 欧美日韩国产三区| 久久综合久久88| 亚洲国产裸拍裸体视频在线观看乱了 | 一区二区三区在线观看视频| 亚洲美女少妇无套啪啪呻吟| av不卡在线| 美女黄毛**国产精品啪啪| 亚洲国产精品专区久久| 一区二区三区四区在线| 欧美性猛交一区二区三区精品| 欧美激情按摩在线| 狠色狠色综合久久| 欧美成人免费网站| 一区二区三区导航| 久久综合图片| 一区二区高清视频| 国产亚洲在线| 欧美男人的天堂| 亚洲大片在线| 狠狠色丁香久久婷婷综合丁香| 久久亚洲春色中文字幕| 一本色道久久综合亚洲精品婷婷| 久久久久国色av免费观看性色| 在线看日韩av| 麻豆精品精华液| 亚洲视频在线观看| 亚洲成色777777女色窝| 亚洲国产99精品国自产| 国产精品久久久久久久9999| 久久精品国产亚洲高清剧情介绍| 亚洲激情视频网| 一区二区三区黄色| 国产一区二三区| 欧美日韩亚洲一区二区| 久久五月激情| 亚洲免费综合| 久久久久一本一区二区青青蜜月| 国产一区二区看久久| 欧美日韩国产精品一区| 欧美综合国产| 欧美激情亚洲| 久热国产精品视频| 性欧美xxxx视频在线观看| 99精品黄色片免费大全| 亚洲第一中文字幕| 国产一区二区主播在线| 国产精品一区二区久久精品 | 玖玖综合伊人| 性高湖久久久久久久久| 99精品欧美一区二区蜜桃免费| 伊人久久噜噜噜躁狠狠躁| 国产精品一区二区三区观看 | 欧美精品色网| 农村妇女精品| 久热这里只精品99re8久| 欧美中文字幕第一页| 篠田优中文在线播放第一区| 亚洲一级黄色| 亚洲一二三四区| 亚洲永久免费精品| 欧美a级片网站| 久久在精品线影院精品国产| 久久国产精彩视频| 久久精品一区二区| 欧美尤物巨大精品爽| 亚洲欧洲精品一区二区三区波多野1战4| 国产乱码精品一区二区三区忘忧草| 欧美午夜精品理论片a级按摩| 欧美日韩视频在线| 国产精品任我爽爆在线播放| 久久久一区二区| 久久免费99精品久久久久久| 久久一日本道色综合久久| 免费人成网站在线观看欧美高清| 欧美多人爱爱视频网站| 欧美二区在线| 国产精品扒开腿做爽爽爽视频| 国产精品久久精品日日| 国产日本欧美一区二区| 狠狠色丁香久久综合频道| 亚洲国产精品久久久久秋霞影院| 亚洲激情啪啪| 亚洲一区二区精品| 久久福利精品| 欧美激情视频一区二区三区免费| 亚洲激情网址| 亚洲在线视频| 久久久亚洲人| 欧美精品在线视频| 国产精品一香蕉国产线看观看| 影音先锋成人资源站| 99国产精品久久久| 久久国产精品网站| 羞羞答答国产精品www一本| 久久久夜色精品亚洲| 欧美成人精品不卡视频在线观看 | 久热精品视频在线观看| 亚洲欧洲三级| 午夜综合激情| 欧美屁股在线| 国产有码一区二区| 99视频精品免费观看| 欧美一区网站| 亚洲老板91色精品久久| 欧美激情一区在线观看| 亚洲一区二区免费| 巨胸喷奶水www久久久免费动漫| 欧美日韩亚洲综合一区| 狠狠综合久久av一区二区小说| 中文一区字幕| 欧美不卡视频一区发布| 亚洲自拍啪啪| 欧美日韩国产三级| 亚洲第一精品电影| 久久久久欧美| 亚洲一区二区三区在线视频| 欧美日本精品一区二区三区| 在线观看av一区|