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

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 閱讀(3157) 評(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| 亚洲专区国产精品| 亚洲精品免费电影| 欧美福利一区二区| 久久综合网hezyo| 亚洲欧美日韩一区| 一本一道久久综合狠狠老精东影业 | 亚洲麻豆国产自偷在线| 久久综合伊人77777蜜臀| 午夜一区在线| 亚洲免费视频成人| 亚洲图片在区色| 99热在线精品观看| 亚洲欧洲精品成人久久奇米网| 国产亚洲欧美激情| 国产欧美日韩视频| 国产精品久久久久免费a∨大胸| 欧美大片免费| 欧美国产乱视频| 免费在线观看精品| 美女任你摸久久| 巨乳诱惑日韩免费av| 久久久久久综合网天天| 久久久久久久一区二区三区| 久久精品人人爽| 久久精品最新地址| 久久久久成人精品| 久久夜色精品国产欧美乱极品| 久久精品视频va| 久久男女视频| 欧美不卡视频| 欧美日韩的一区二区| 欧美日韩一区在线观看视频| 欧美日精品一区视频| 国产精品www| 国产精品拍天天在线| 国产美女精品视频| 国产在线日韩| 136国产福利精品导航网址| 亚洲第一视频| 艳妇臀荡乳欲伦亚洲一区| 亚洲免费观看在线观看| 一区二区三区不卡视频在线观看| 一区二区三区蜜桃网| 亚洲欧美日韩高清| 欧美专区日韩视频| 噜噜噜躁狠狠躁狠狠精品视频| 欧美电影专区| 亚洲精品乱码久久久久久日本蜜臀 | 蜜乳av另类精品一区二区| 美女脱光内衣内裤视频久久影院 | 久久久久欧美精品| 欧美69wwwcom| 欧美色精品天天在线观看视频| 国产精品看片你懂得| 国内精品久久久久久久果冻传媒| 亚洲国产成人精品久久久国产成人一区 | 国产欧美一区二区精品婷婷| 黄页网站一区| 洋洋av久久久久久久一区| 亚洲女人av| 美女黄毛**国产精品啪啪| 亚洲人久久久| 欧美一二三区在线观看| 免费在线看成人av| 国产精品嫩草影院av蜜臀| 激情成人亚洲| 中文在线资源观看网站视频免费不卡 | 欧美一区1区三区3区公司| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美日韩一区综合| 黄色成人在线| 国产精品99久久久久久久久| 久久久人成影片一区二区三区观看 | 久久久久一区二区三区四区| 欧美日韩久久精品| 国语自产在线不卡| 中文在线不卡| 欧美成人在线影院| 亚洲综合精品一区二区| 欧美成人高清| 国产午夜精品一区二区三区视频 | 国内免费精品永久在线视频| 亚洲理论在线观看| 久久欧美肥婆一二区| av不卡在线| 美国成人直播| 国产欧美一区二区三区国产幕精品 | 欧美在线影院| 亚洲国产美女精品久久久久∴| 亚洲伊人一本大道中文字幕| 欧美二区在线| 黑人巨大精品欧美黑白配亚洲| 亚洲免费视频成人| 91久久在线| 久久婷婷亚洲| 国产一二三精品| 亚洲天堂久久| 亚洲精品欧美激情| 久久美女性网| 国产一级揄自揄精品视频| 亚洲一二三区视频在线观看| 亚洲国产精品成人精品| 久久久综合视频| 国产一区二区三区黄| 亚洲欧美久久久久一区二区三区| 亚洲国产日本| 美女精品一区| 精久久久久久| 久久婷婷国产麻豆91天堂| 亚洲一区网站| 国产精品捆绑调教| 亚洲校园激情| 一本大道久久a久久精品综合| 欧美激情久久久| 亚洲乱码国产乱码精品精| 欧美jizzhd精品欧美喷水| 久久久天天操| 在线欧美小视频| 欧美成年视频| 免费在线日韩av| 亚洲精品三级| 91久久在线视频| 欧美人在线视频| 在线视频精品一| 一本久久知道综合久久| 欧美三级视频| 亚洲欧美国产一区二区三区| 在线亚洲免费| 国产精品午夜av在线| 久久av老司机精品网站导航| 欧美一区二区三区精品| 国产一区再线| 久久香蕉精品| 久久伊伊香蕉| 亚洲国产欧美一区二区三区久久| 欧美激情精品久久久久久黑人| 免费视频一区| 中日韩美女免费视频网址在线观看| 99亚洲精品| 国产拍揄自揄精品视频麻豆| 久久久噜噜噜久久中文字幕色伊伊| 久久精品视频在线看| 亚洲国产老妈| 9久re热视频在线精品| 国产精品视频99| 久久亚洲美女| 欧美黑人在线观看| 亚洲欧美综合| 久久亚洲精品视频| 日韩视频一区二区三区| 亚洲一区bb| 一区精品在线| 亚洲免费精彩视频| 国产欧美丝祙| 欧美激情亚洲综合一区| 欧美视频一区二区三区| 久久成人一区二区| 欧美aⅴ99久久黑人专区| 亚洲先锋成人| 久久久av水蜜桃| 一区二区三区欧美| 欧美制服第一页| 日韩视频永久免费观看| 亚洲欧美成人网| 亚洲国内自拍| 亚洲综合精品自拍| 亚洲人在线视频| 亚洲欧美成人精品| 亚洲人精品午夜在线观看| 亚洲一二三区精品| 亚洲激情亚洲| 亚洲欧美国产毛片在线| 亚洲精品国产精品国自产观看浪潮| 亚洲视频综合在线| 亚洲破处大片| 欧美诱惑福利视频| 亚洲视频在线一区| 久久综合九色欧美综合狠狠| 欧美一二三视频| 欧美国产日韩一区二区| 欧美午夜a级限制福利片| 久久婷婷蜜乳一本欲蜜臀| 欧美网站在线| 欧美激情偷拍| 黄色国产精品一区二区三区| 亚洲视频一起| 亚洲美女啪啪| 久久野战av| 久久久噜噜噜久久中文字免| 国产精品国产成人国产三级| 亚洲国产精品va在线看黑人| 精品88久久久久88久久久| 亚洲在线视频网站| 亚洲一级二级| 欧美精品乱码久久久久久按摩|