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

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>
            国产午夜精品久久久| 国产精品亚洲人在线观看| 在线观看欧美一区| 米奇777超碰欧美日韩亚洲| 久久精品国产精品| 亚洲二区精品| 最新国产成人av网站网址麻豆| 免费看亚洲片| 夜色激情一区二区| 日韩午夜在线电影| 你懂的成人av| 亚洲乱亚洲高清| 亚洲人成77777在线观看网| 蜜桃av一区二区三区| 国产亚洲欧美激情| 美玉足脚交一区二区三区图片| 久久不射中文字幕| 在线免费观看日韩欧美| 欧美va天堂| 欧美国产日韩a欧美在线观看| 91久久中文| 亚洲免费电影在线观看| 国产精品高潮呻吟久久av无限| 亚洲一区二区日本| 亚洲综合精品自拍| 狠狠久久五月精品中文字幕| 久久久久国产一区二区三区四区| 欧美在线一二三四区| 在线精品亚洲| 亚洲精品免费网站| 国产精品毛片| 久久综合精品一区| 欧美美女bbbb| 欧美一区二区三区播放老司机| 欧美一区2区三区4区公司二百| 激情久久久久久| 亚洲激情一区二区| 国产区精品在线观看| 欧美高清你懂得| 欧美午夜不卡视频| 欧美一区二区免费观在线| 性欧美办公室18xxxxhd| 1024国产精品| 亚洲第一页中文字幕| 国产欧美日韩麻豆91| 午夜精品久久久久久久99樱桃| 日韩视频永久免费观看| 国产精品久久一卡二卡| 欧美在线短视频| 欧美成人自拍| 久久精品人人做人人爽电影蜜月| 快播亚洲色图| 欧美有码在线观看视频| 欧美—级在线免费片| 久久免费视频网| 欧美日韩综合视频网址| 久久伊人精品天天| 国产精品日韩专区| 亚洲国产日本| 尤物精品国产第一福利三区| 亚洲桃色在线一区| 日韩视频一区二区三区| 久久国内精品视频| 欧美一区2区三区4区公司二百| 男女精品视频| 久久综合久久久久88| 国产精品成人一区二区三区吃奶| 欧美福利专区| **网站欧美大片在线观看| 艳女tv在线观看国产一区| 极品裸体白嫩激情啪啪国产精品| 中文久久乱码一区二区| 在线精品视频一区二区| 欧美一进一出视频| 欧美在线观看一区二区| 国产精品vvv| 在线亚洲一区二区| 亚洲性夜色噜噜噜7777| 欧美日本一区| 亚洲三级电影全部在线观看高清| 亚洲国产你懂的| 老司机精品导航| 亚洲欧美一区二区原创| 久久精品免费播放| 久久高清国产| 一区在线影院| 久久亚洲综合网| 欧美好吊妞视频| 亚洲激情啪啪| 欧美精品v日韩精品v国产精品 | 亚洲日本va午夜在线影院| 揄拍成人国产精品视频| 久久免费黄色| 久久综合久久久久88| 亚洲国产成人精品女人久久久 | 久久精品一区二区| 国产一区成人| 久久婷婷麻豆| 91久久综合| 午夜精品在线看| 国产一区二区久久| 久久夜色撩人精品| 亚洲区免费影片| 亚洲尤物精选| 韩日视频一区| 欧美高清在线视频观看不卡| 亚洲国产日韩美| 国产精品99久久99久久久二8 | 久久久激情视频| 亚洲国产精品福利| 亚洲欧美在线观看| 狠狠色丁香久久婷婷综合_中| 久久人体大胆视频| 男女视频一区二区| 日韩亚洲欧美综合| 欧美日韩亚洲综合在线| 亚洲一区综合| 欧美不卡一卡二卡免费版| 一区二区三区视频观看| 国产精品揄拍500视频| 麻豆精品一区二区综合av| 一区二区高清视频| 老司机成人在线视频| 亚洲午夜精品网| 亚洲电影毛片| 国产精品视频你懂的| 欧美gay视频| 欧美一区二区三区四区在线观看地址 | 欧美国产在线视频| 亚洲在线不卡| 亚洲精华国产欧美| 国产欧美va欧美va香蕉在| 欧美国产日韩xxxxx| 性做久久久久久| 欧美成人国产va精品日本一级| 亚洲一区二区日本| 亚洲精品视频在线播放| 欧美日韩精品在线视频| 午夜精品三级视频福利| 亚洲区一区二区三区| 久久精品99| 在线成人免费视频| 国产精品高潮在线| 欧美亚洲不卡| 欧美激情一区二区三区在线| 久久久91精品| 性久久久久久久久| 亚洲一区二区三区视频| 亚洲精品一区二区三区四区高清 | 国产在线国偷精品产拍免费yy| 欧美乱人伦中文字幕在线| 蜜臀久久99精品久久久画质超高清 | 国产亚洲一区在线播放| 国产精品欧美精品| 欧美色视频一区| 欧美日精品一区视频| 欧美a一区二区| 欧美成人综合| 暖暖成人免费视频| 欧美本精品男人aⅴ天堂| 久久影音先锋| 欧美.www| 欧美激情第五页| 欧美精品日日鲁夜夜添| 欧美国产成人在线| 欧美精品少妇一区二区三区| 欧美高清一区| 欧美日韩和欧美的一区二区| 欧美电影在线播放| 欧美另类69精品久久久久9999| 久久久久国产一区二区三区| 久久九九精品99国产精品| 久久精品一区二区三区中文字幕| 久久精品国产99国产精品| 久久精品99国产精品日本| 久久欧美肥婆一二区| 免费成人av在线看| 欧美美女操人视频| 国产精品久久国产精品99gif| 国产精品久久中文| 国产一区二区日韩精品欧美精品| 国产主播一区二区三区| 亚洲国产精品成人| 亚洲视频在线视频| 亚洲深夜福利| 亚洲免费小视频| 久久久91精品国产| 欧美成人精品福利| 99ri日韩精品视频| 性久久久久久| 久久这里只有精品视频首页| 欧美精品久久久久a| 国产日韩精品一区二区三区在线 | 久久天天躁夜夜躁狠狠躁2022| 欧美成人午夜激情| 国产精品免费网站在线观看| 精品动漫av| 亚洲视频axxx| 美女免费视频一区| 一区二区三区产品免费精品久久75 |