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

oyjpArt ACM/ICPC算法程序設(shè)計空間

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

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

后來從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


題目的意思是找到一個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ù)  更多評論   

2008-06-04 13:43 by w
你好,這個程序我看不懂……能講一下思路嗎?

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-04 14:56 by oyjpart
你可以參考《算法藝術(shù)與信息學(xué)競賽》303-304頁
3.地震--最有比率生成樹 一節(jié)的解答
和這個非常類似

就是2分枚舉那個答案,然后將除的表達(dá)式的權(quán) 轉(zhuǎn)化成+-*表達(dá)式的權(quán),再這個基礎(chǔ)上求目標(biāo)函數(shù)。 如果目標(biāo)函數(shù) != 0,則枚舉的答案應(yīng)該向使目標(biāo)函數(shù)更接近0的方向取值,

go函數(shù)實際求的就是最大權(quán)的hamilton回路。用的是基本的壓縮狀態(tài)廣搜。

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

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ù)  更多評論   

2008-06-04 15:10 by Surfing
一點小問題,更正一下

if (g_PathIndex[nPathIndex] >= nCities)
{
g_dRatio[nPathIndex] = (double)nGirls / nBoys;
nGirls = nBoys = 0;
return 0;
}

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-04 17:13 by oyjpart
@Surfing
嘿嘿,謝謝分享

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-05 22:27 by w
多謝,受教了

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-05 23:07 by oyjpart
不謝

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-09 23:54 by richardxx
我做了百度那題,但比賽完才想起我貼的那個模版有點問題,最后果然只有4.5分,和沒做沒區(qū)別~~

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-10 12:03 by oyjpart
@richardxx
呵呵 進復(fù)賽了就可以了不 看我們這種初賽就被水掉的菜菜。。

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-10 20:01 by 小Young
跟著大牛漲經(jīng)驗值!

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-10 20:34 by oyjpart
汗。。。
您謙虛了。。。

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-11 19:12 by 小Young
請問這題你用隊列有什么用途啊?
這題不用隊列也可以啊.

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

2008-06-11 22:19 by oyjpart
@ 小Young
就是廣搜用的隊列
不用隊列你的意思是深搜么?

# re: 基本參數(shù)搜索  回復(fù)  更多評論   

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>
            欧美大片免费观看在线观看网站推荐| 欧美在线视频一区二区三区| 亚洲电影观看| 欧美.www| 一本色道久久88精品综合| 国产日韩欧美精品一区| 久久影视精品| 欧美激情在线| 亚洲男同1069视频| 久久精品国产清高在天天线| 最新国产の精品合集bt伙计| 亚洲日本成人在线观看| 国产精品亚洲产品| 美女视频黄免费的久久| 欧美精品一区二区三区四区| 欧美亚洲自偷自偷| 麻豆精品精华液| 亚洲一级在线| 久久综合电影| 香蕉久久国产| 欧美交受高潮1| 久久久久久亚洲精品中文字幕| 鲁鲁狠狠狠7777一区二区| 亚洲香蕉成视频在线观看| 久久er精品视频| 在线亚洲一区观看| 久久免费视频这里只有精品| 亚洲一二三区视频在线观看| 久久久久久一区二区| 亚洲香蕉在线观看| 欧美jizz19性欧美| 久久国产主播| 欧美三区不卡| 国产欧美日韩中文字幕在线| 亚洲第一区在线观看| 国产欧美日韩激情| 亚洲六月丁香色婷婷综合久久| 国产亚洲一区在线播放| 亚洲图片在线观看| 一区二区福利| 欧美成人精品一区二区| 久久久久久9| 国产精品香蕉在线观看| 亚洲精品一区中文| 亚洲欧洲一区二区三区在线观看| 欧美一区二区久久久| 亚洲一区二区三| 欧美精品在线视频| 亚洲激情黄色| 91久久线看在观草草青青| 久久国产精品一区二区| 欧美在线免费一级片| 国产精品久久国产愉拍| 一区二区三区精品久久久| 一卡二卡3卡四卡高清精品视频| 欧美成人免费全部| 欧美激情亚洲综合一区| 亚洲黄色有码视频| 欧美sm视频| 亚洲国产精品一区制服丝袜 | 欧美成人午夜| 欧美成人免费视频| 亚洲激情国产| 欧美精品v国产精品v日韩精品| 欧美福利视频在线观看| 亚洲国产精品一区二区久| 裸体女人亚洲精品一区| 欧美成在线视频| 亚洲免费成人av电影| 欧美久久久久中文字幕| 99精品免费| 欧美在线免费看| 尤物九九久久国产精品的分类| 久久久综合精品| 欧美激情1区| 一本色道久久综合精品竹菊| 欧美视频日韩视频在线观看| 亚洲亚洲精品三区日韩精品在线视频 | 久久艳片www.17c.com| 欧美丰满高潮xxxx喷水动漫| 亚洲乱码久久| 国产精品久久久久久久一区探花 | 一区二区三区视频在线播放| 久久高清一区| 亚洲国产精品va在线观看黑人| 欧美国产另类| 亚洲一级免费视频| 麻豆成人91精品二区三区| 最新成人av在线| 国产精品久久久久aaaa九色| 久久国产精品久久久久久电车| 欧美成人免费在线视频| 亚洲一区二区在线看| 韩国欧美国产1区| 欧美日本在线| 久久久999成人| 一本色道久久综合狠狠躁的推荐| 久久成人免费电影| 亚洲精品色婷婷福利天堂| 欧美午夜不卡在线观看免费| 久久久99国产精品免费| 亚洲精品老司机| 久色婷婷小香蕉久久| 亚洲一区二区三区精品视频| 玉米视频成人免费看| 欧美无乱码久久久免费午夜一区| 久久久人成影片一区二区三区 | 久久精品亚洲国产奇米99| 亚洲人成77777在线观看网| 久久精品国产99| 亚洲网站啪啪| 91久久精品一区二区三区| 国产片一区二区| 欧美日韩国产123区| 久久精品国产久精国产爱| 一区二区日韩伦理片| 亚洲第一黄色| 欧美1区视频| 久久久久成人网| 欧美伊人久久大香线蕉综合69| 亚洲精品护士| 亚洲国产另类久久精品| 国产揄拍国内精品对白| 国产精品羞羞答答xxdd| 欧美天堂亚洲电影院在线播放 | 美腿丝袜亚洲色图| 久久精彩免费视频| 欧美一区二区三区免费视频| 中国女人久久久| 9久re热视频在线精品| 亚洲高清在线观看一区| 欧美成人精品不卡视频在线观看| 久久精品日韩一区二区三区| 欧美在线观看www| 亚洲欧美一区二区精品久久久| 亚洲一卡二卡三卡四卡五卡| 99精品久久免费看蜜臀剧情介绍| 亚洲精品免费观看| 亚洲精品中文字幕在线| 亚洲精品乱码| 亚洲精品专区| 正在播放欧美视频| 亚洲网站在线看| 亚洲摸下面视频| 欧美一区二区视频观看视频| 久久狠狠亚洲综合| 久久久国产一区二区三区| 久久综合九色欧美综合狠狠| 老司机亚洲精品| 欧美激情一区二区三级高清视频| 欧美激情1区| 亚洲最新中文字幕| 亚洲欧美激情视频| 久久久www| 欧美成人亚洲| 国产精品久久久久久久久久免费| 国产精品视频免费| 精品999久久久| aaa亚洲精品一二三区| 亚洲免费在线| 老司机精品视频网站| 亚洲人成在线观看一区二区 | 欧美国产日本在线| 99国产精品99久久久久久| 亚洲免费在线看| 久久午夜羞羞影院免费观看| 欧美精品一区二区三区蜜桃| 国产精品裸体一区二区三区| 国语自产精品视频在线看抢先版结局 | 乱码第一页成人| 亚洲精品视频在线看| 亚洲在线一区二区| 美女性感视频久久久| 欧美图区在线视频| 精品999在线观看| 亚洲自拍16p| 欧美成人亚洲成人| 亚洲一区欧美二区| 你懂的国产精品| 国产日韩欧美黄色| 一区二区欧美激情| 久久尤物视频| 亚洲视频每日更新| 欧美成人精品福利| 国产亚洲成av人片在线观看桃| 亚洲裸体视频| 六月婷婷一区| 亚洲免费在线看| 欧美日韩成人在线播放| 激情久久综合| 欧美亚洲一区三区| 日韩亚洲欧美在线观看| 开元免费观看欧美电视剧网站| 国产精品试看| 亚洲一区999| 亚洲精品久久久久久下一站| 久久九九免费视频| 国产亚洲精品一区二555| 亚洲淫性视频| 亚洲伦理在线免费看|