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

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>
            在线视频亚洲一区| 亚洲深夜av| 亚洲国产精品久久久久秋霞影院| 亚洲韩国日本中文字幕| 一区二区国产日产| 久久激情视频久久| 亚洲国产精品久久久久婷婷884| 亚洲精品久久久久久久久| 亚洲午夜在线视频| 久热国产精品视频| 国产精品久久久久国产精品日日| 国产有码在线一区二区视频| 亚洲另类春色国产| 久久精品官网| 日韩香蕉视频| 久久综合色婷婷| 国产免费成人在线视频| 日韩视频免费在线观看| 久久久精品五月天| av成人动漫| 免费一区视频| 国精品一区二区三区| 中日韩男男gay无套 | 欧美va天堂| 正在播放欧美视频| 欧美aⅴ99久久黑人专区| 国产日韩亚洲欧美综合| 99国产精品99久久久久久| 久久久久国产免费免费| 日韩一级黄色片| 免费在线视频一区| 国际精品欧美精品 | 91久久嫩草影院一区二区| 午夜亚洲激情| 国产精品久久久久久久7电影| 亚洲日本电影| 免费成年人欧美视频| 亚洲制服欧美中文字幕中文字幕| 欧美激情黄色片| 在线欧美亚洲| 久久一区二区三区国产精品| 亚洲欧美精品中文字幕在线| 欧美日韩在线播放一区| 亚洲精品日韩欧美| 免费一级欧美片在线播放| 欧美亚洲三区| 国产精品视频999| 亚洲天堂成人在线观看| 最新中文字幕亚洲| 狂野欧美激情性xxxx| 国产自产女人91一区在线观看| 午夜欧美精品久久久久久久| 99精品欧美一区二区三区| 欧美福利电影网| 91久久综合| 欧美国产激情| 老色鬼久久亚洲一区二区| 一区久久精品| 蜜桃久久av| 久久综合狠狠综合久久激情| 国语自产精品视频在线看抢先版结局 | 小处雏高清一区二区三区| 国产精品欧美久久| 亚洲女同精品视频| 一本色道久久加勒比精品| 欧美区一区二区三区| 亚洲伦伦在线| 91久久国产综合久久蜜月精品| 欧美国产亚洲另类动漫| 亚洲免费观看高清完整版在线观看| 欧美激情一区二区三级高清视频| 欧美成人国产va精品日本一级| 亚洲国产一区二区视频| 欧美激情亚洲自拍| 欧美黑人国产人伦爽爽爽| 日韩视频一区二区三区| 亚洲精品一区二区三区福利| 欧美二区在线| av成人免费观看| 99精品久久| 国产伦精品免费视频| 久久久噜噜噜久久中文字幕色伊伊| 久久国产精品久久久久久电车| 激情小说亚洲一区| 欧美黄网免费在线观看| 欧美久久视频| 亚洲欧美在线aaa| 欧美一区在线直播| 亚洲国产一区在线| 亚洲人午夜精品| 欧美亚日韩国产aⅴ精品中极品| 香蕉乱码成人久久天堂爱免费| 欧美一区1区三区3区公司| 伊人婷婷久久| 亚洲欧洲三级| 国产精品日韩欧美一区二区三区 | 久久国产一二区| 久久久久久伊人| 亚洲精品在线一区二区| 一本久久青青| 国产一区二区三区在线观看视频 | 亚洲免费视频一区二区| 亚洲欧美精品在线| 曰韩精品一区二区| 亚洲人成网站在线观看播放| 欧美四级在线观看| 久久精品国产视频| 欧美岛国激情| 欧美亚洲一区二区在线观看| 久久精品一本| 一区二区免费在线播放| 性视频1819p久久| 亚洲精品国产品国语在线app| 亚洲图片自拍偷拍| 亚洲成色精品| 亚洲午夜国产成人av电影男同| 精品成人一区| 中文一区二区| 亚洲国产成人午夜在线一区| 艳女tv在线观看国产一区| 国产在线日韩| 99精品视频免费观看| 加勒比av一区二区| 在线亚洲一区观看| 亚洲国产日韩一区| 亚洲资源av| 日韩视频一区二区在线观看| 午夜欧美不卡精品aaaaa| 亚洲欧洲日本专区| 午夜宅男久久久| 一本色道久久88综合日韩精品| 午夜在线电影亚洲一区| av不卡免费看| 久久人人97超碰人人澡爱香蕉| 亚洲影院高清在线| 美国成人直播| 久久国产精品亚洲77777| 欧美精品激情| 久热精品视频| 国产精品久久福利| 亚洲大胆女人| 国产亚洲欧洲一区高清在线观看 | 亚洲美女精品久久| 精品动漫av| 亚洲欧美国产制服动漫| 日韩一级裸体免费视频| 久久精品欧美| 午夜一区二区三区在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美黄色视屏| 久久久精品视频成人| 欧美私人啪啪vps| 亚洲激情视频网| 伊人精品久久久久7777| 亚洲一区二区三区激情| 日韩视频免费| 久久综合九九| 久久人人97超碰人人澡爱香蕉 | 9人人澡人人爽人人精品| 久久精品九九| 欧美在线视屏| 国产精品久久久久久久一区探花 | 欧美成人日韩| 蜜月aⅴ免费一区二区三区| 国产欧美日韩一区二区三区在线观看| 亚洲人体大胆视频| 亚洲三级国产| 久久一区二区三区国产精品| 久久大综合网| 国产精品亚发布| 一区二区三区国产在线| 9色精品在线| 欧美第十八页| 亚洲第一主播视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美肥婆bbw| 影音先锋在线一区| 久久av一区二区| 久久久久久久久久码影片| 国产农村妇女精品| 亚洲免费视频成人| 亚洲欧美在线视频观看| 欧美日韩不卡视频| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲经典在线看| 免费影视亚洲| 亚洲国产欧美国产综合一区| 亚洲国产另类久久精品| 老**午夜毛片一区二区三区| 蜜臀a∨国产成人精品| 在线播放日韩| 免费不卡在线视频| 欧美激情中文不卡| 亚洲人成网站影音先锋播放| 蜜桃av综合| 亚洲韩国日本中文字幕| 亚洲精品在线免费| 欧美日韩国产高清视频| 99精品视频一区| 亚洲欧美在线免费|