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

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>
            一区二区三区日韩在线观看| 欧美在线一级视频| 亚洲综合日本| 久久精品九九| 亚洲国产精品传媒在线观看 | 99精品久久久| 欧美一区成人| 亚洲人成毛片在线播放| 欧美一区视频在线| 欧美日韩国产一级片| 国产日韩欧美夫妻视频在线观看| 伊人成人网在线看| 亚洲欧美资源在线| 亚洲激情欧美| 久久久精品欧美丰满| 国产精品每日更新| 一区二区免费看| 欧美高清自拍一区| 久久精品免费播放| 国产女优一区| 亚洲在线观看免费| 日韩亚洲一区二区| 欧美交受高潮1| 亚洲福利久久| 麻豆国产精品777777在线| 亚洲一本视频| 国产精品夫妻自拍| 中文在线资源观看视频网站免费不卡| 免费一级欧美片在线观看| 午夜亚洲性色福利视频| 国产精品久久久久7777婷婷| av72成人在线| 亚洲精品国产精品久久清纯直播| 鲁大师影院一区二区三区| 精品动漫av| 欧美成人激情视频| 久久久青草婷婷精品综合日韩 | 欧美福利精品| 亚洲国产一二三| 乱中年女人伦av一区二区| 亚洲欧美日韩视频一区| 国产欧美日韩不卡| 久久国产精品72免费观看| 亚洲欧美成人在线| 国产区在线观看成人精品| 欧美伊久线香蕉线新在线| 亚洲欧美国产精品桃花| 国产日韩欧美不卡| 久久久久久免费| 久久在线视频| 亚洲乱码久久| aa级大片欧美| 国产欧美日韩一区| 久久综合成人精品亚洲另类欧美| 久久se精品一区二区| 伊人伊人伊人久久| 亚洲国产精品黑人久久久| 欧美激情国产日韩精品一区18| 亚洲精品中文字| 一本色道久久综合亚洲二区三区| 国产精品青草久久久久福利99| 欧美在线观看视频在线| 久久免费视频观看| 日韩一区二区高清| 午夜日韩在线观看| 亚洲国产1区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲美女精品久久| 99精品欧美一区二区蜜桃免费| 国产精品久久久久毛片大屁完整版| 欧美在线高清| 毛片一区二区三区| 亚洲一区二区三区在线| 欧美一区日本一区韩国一区| 亚洲毛片在线看| 午夜精品亚洲| 亚洲免费av网站| 久久激情一区| 亚洲一区二区三区午夜| 久久久亚洲国产天美传媒修理工| 亚洲精品中文在线| 欧美在线视频日韩| 国产精品99久久久久久有的能看 | 亚洲一二三区精品| 亚洲高清一二三区| 亚洲一区二区三区四区视频| 在线看国产日韩| 一区二区三区欧美成人| 伊人久久大香线蕉av超碰演员| 一道本一区二区| 亚洲国产精品久久精品怡红院| 亚洲视频一区二区| 99国产精品99久久久久久| 久久精品国产精品| 午夜精品久久久久久久| 欧美激情自拍| 欧美成黄导航| 国产日韩综合一区二区性色av| 亚洲精品久久视频| 亚洲国产精品va在线观看黑人| 午夜精品一区二区三区电影天堂 | 国产精品自在在线| 亚洲精品九九| 亚洲精品国产精品国自产观看浪潮| 先锋影音一区二区三区| 亚洲一区免费在线观看| 欧美精品在线看| 亚洲国产精品999| 亚洲成人在线网| 久久国内精品视频| 久久九九热免费视频| 国产麻豆日韩| 亚洲欧美日韩国产中文在线| 亚洲一区二区三区中文字幕在线| 欧美激情视频一区二区三区在线播放 | 久久久精品国产免大香伊| 国产精品久久久久毛片大屁完整版| 亚洲国产成人精品视频| 亚洲黄色尤物视频| 欧美电影在线观看完整版| 亚洲电影第1页| 日韩一级成人av| 欧美日韩喷水| 一本色道久久综合一区| 亚洲自拍偷拍麻豆| 国产精品午夜在线| 亚洲欧美一级二级三级| 欧美在线观看天堂一区二区三区| 国产欧美日韩视频| 久久露脸国产精品| 欧美激情一区二区在线| 亚洲精品视频啊美女在线直播| 免费看亚洲片| 亚洲乱码久久| 亚洲欧美在线观看| 国产一区二区三区四区五区美女 | 亚洲国产婷婷香蕉久久久久久99 | aa国产精品| 国产精品国产三级国产普通话99 | 久久久水蜜桃av免费网站| 欧美电影在线观看| 一本色道久久| 国产欧亚日韩视频| 免费h精品视频在线播放| 99国产精品视频免费观看| 亚洲欧美日韩一区| 136国产福利精品导航| 欧美日韩福利视频| 欧美诱惑福利视频| 亚洲激情在线观看视频免费| 亚洲一区二区视频在线| 国产视频精品免费播放| 蜜臀久久99精品久久久画质超高清 | 亚洲乱码国产乱码精品精天堂 | 欧美国产三级| 亚洲无线一线二线三线区别av| 久久一区国产| 亚洲五月六月| 亚洲韩日在线| 国产日产欧美精品| 欧美激情综合色| 久久精精品视频| 一本色道久久88亚洲综合88| 久久夜色撩人精品| 亚洲欧美日韩国产综合| 亚洲全黄一级网站| 国产视频一区在线观看一区免费| 欧美a级大片| 欧美在线free| 亚洲免费小视频| 亚洲精品少妇网址| 免费不卡在线观看| 久久成人综合视频| 亚洲尤物在线视频观看| 亚洲精品欧美一区二区三区| 国产亚洲午夜| 国产精品美女久久久| 欧美精品色综合| 老司机午夜精品视频| 久久精品道一区二区三区| 亚洲一线二线三线久久久| 亚洲人成欧美中文字幕| 麻豆精品网站| 久久五月激情| 久久久久久久久久久久久9999 | 黄色精品一区| 国产精品永久入口久久久| 欧美日韩在线直播| 欧美日韩在线一区| 欧美日韩在线播放一区二区| 欧美国产日本在线| 欧美精品日韩一本| 欧美女主播在线| 欧美顶级艳妇交换群宴| 欧美不卡视频一区| 午夜精品福利一区二区三区av| 亚洲免费精品| 99精品99| 亚洲免费伊人电影在线观看av| 亚洲一区二区在线观看视频|