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

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>
            久久亚洲综合网| 国产精品美女久久久免费| 女生裸体视频一区二区三区| 欧美一级免费视频| 久久国产精彩视频| 浪潮色综合久久天堂| 欧美va天堂在线| 亚洲精品网址在线观看| 99热精品在线| 欧美综合国产精品久久丁香| 久久久五月天| 欧美久久久久免费| 国产午夜精品久久久| 亚洲国内高清视频| 亚洲一区国产精品| 久久资源av| 亚洲美女区一区| 久久av资源网站| 欧美精品一区二区三区蜜臀| 国产精品视频免费观看| 亚洲国产美女精品久久久久∴| 亚洲图中文字幕| 男人天堂欧美日韩| 亚洲一区二区视频| 欧美激情aⅴ一区二区三区| 国产精品你懂得| 亚洲欧洲在线看| 久久久久欧美| 一本大道久久精品懂色aⅴ| 久久婷婷成人综合色| 欧美午夜三级| 亚洲免费久久| 欧美成人综合网站| 欧美一区二区高清在线观看| 欧美色欧美亚洲另类七区| 亚洲电影中文字幕| 久久野战av| 国产精品日韩在线一区| 91久久夜色精品国产网站| 性色av香蕉一区二区| 亚洲精品国精品久久99热一| 亚洲一区在线视频| 欧美色欧美亚洲高清在线视频| 在线不卡中文字幕| 久久久久久精| 亚洲私人影院在线观看| 亚洲亚洲精品在线观看| 欧美va亚洲va香蕉在线| 欧美一区二区三区免费在线看| 欧美色123| av成人免费| 亚洲国产精品精华液2区45| 久久精品91久久香蕉加勒比| 国产精品嫩草99a| 亚洲欧美中文另类| 亚洲一区二区精品在线| 国产精品免费小视频| 欧美亚洲免费| 亚洲欧美卡通另类91av| 国产情人综合久久777777| 欧美有码在线观看视频| 亚洲女性裸体视频| 国产麻豆91精品| 久久国产精品99国产| 欧美一区二区在线看| 激情久久五月| 亚洲福利精品| 欧美视频日韩视频在线观看| 亚洲男女自偷自拍| 午夜影院日韩| 亚洲第一福利在线观看| 亚洲国产一区二区三区a毛片| 欧美韩国在线| 亚洲欧美一级二级三级| 欧美一区二区在线免费播放| 在线观看日韩www视频免费 | 免费久久99精品国产自| …久久精品99久久香蕉国产| 欧美成人有码| 欧美视频一区二| 性欧美在线看片a免费观看| 久久电影一区| 99在线热播精品免费| 中国成人在线视频| 国产曰批免费观看久久久| 欧美不卡一卡二卡免费版| 欧美日韩国产在线| 香蕉av777xxx色综合一区| 久久精品一区二区三区不卡| 亚洲裸体俱乐部裸体舞表演av| 亚洲视频网在线直播| 激情久久综合| 亚洲精品视频一区| 国产在线不卡视频| 亚洲美女精品久久| 日韩视频免费在线| 一卡二卡3卡四卡高清精品视频| 国产精品户外野外| 你懂的国产精品| 欧美系列电影免费观看| 两个人的视频www国产精品| 欧美日韩成人在线视频| 卡通动漫国产精品| 国产精品麻豆成人av电影艾秋| 欧美福利电影网| 国产欧美视频一区二区| 91久久精品国产91久久性色tv| 国产精品日韩久久久| 亚洲国产精品va| 国产午夜精品视频| 一本一本大道香蕉久在线精品| 在线观看日韩av电影| 国内精品久久久久伊人av| 亚洲韩国青草视频| 国产视频一区三区| 日韩亚洲欧美综合| 亚洲国产精品va在看黑人| 午夜亚洲精品| 亚洲免费网址| 欧美色中文字幕| 亚洲精品美女91| 亚洲国产精品日韩| 香蕉久久一区二区不卡无毒影院| 亚洲精品美女久久7777777| 欧美一区二区三区免费看| 性欧美8khd高清极品| 一区二区国产日产| 玖玖视频精品| 久久婷婷久久| 国内成+人亚洲+欧美+综合在线| 日韩一级大片在线| 一区二区三区欧美| 欧美性大战久久久久久久蜜臀| 最新国产成人av网站网址麻豆| 亚洲国产成人精品久久久国产成人一区 | 欧美三区在线视频| 亚洲电影免费观看高清完整版| 伊人成人在线| 久久精品亚洲| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产一区白浆| 欧美在线视频一区| 欧美a级大片| 亚洲精品日韩在线| 欧美日韩一区二区三区在线视频| 日韩天堂在线观看| 香蕉乱码成人久久天堂爱免费| 国产精品亚洲片夜色在线| 亚洲在线网站| 久热精品在线视频| 亚洲人成网站777色婷婷| 欧美大片18| 在线午夜精品自拍| 欧美一区二区三区日韩| 狠狠综合久久av一区二区小说| 久久综合色8888| 亚洲免费播放| 欧美在线三级| 在线观看欧美日韩| 欧美日韩一区二区三区高清| 亚洲欧美激情精品一区二区| 日韩天堂av| 欧美日韩岛国| 一本久久a久久免费精品不卡| 一区二区三区国产精华| 国产麻豆综合| 久久婷婷国产综合国色天香| 亚洲国产精品成人一区二区| 亚洲一区二区三区高清| 韩国av一区二区三区在线观看| 欧美成人一品| 午夜精品成人在线| 亚洲国产婷婷香蕉久久久久久99 | 国产综合在线看| 免费视频亚洲| 亚洲一区二区三区777| 欧美粗暴jizz性欧美20| 亚洲视频精品在线| 欧美成人午夜激情在线| 午夜精品偷拍| 最新热久久免费视频| 国产欧美精品日韩区二区麻豆天美| 久久男女视频| 午夜欧美不卡精品aaaaa| 亚洲福利视频一区| 久久电影一区| 亚洲一区中文| 亚洲日本免费电影| 国产亚洲欧美一区| 国产精品久久国产三级国电话系列 | 国产精品美女久久久久久久| 免费在线欧美视频| 午夜一区二区三视频在线观看| 亚洲人成欧美中文字幕| 鲁大师影院一区二区三区| 欧美在线视频a| 欧美亚洲尤物久久| 亚洲一二三区视频在线观看| 亚洲人成网站影音先锋播放| 激情伊人五月天久久综合|