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

?/*
? Name:
? Copyright:
? Author:
? Date: 28-05-07 15:26
? Description: 2.飯團(tuán)的煩惱
“午餐飯團(tuán)”是百度內(nèi)部參與人數(shù)最多的民間組織。
同一個(gè)部門的、同一所大學(xué)的、同一年出生的、使用同一種型號(hào)電腦的員工們總是以各種理由組織各種長期的、臨時(shí)的飯團(tuán)。


參加飯團(tuán),不僅可以以優(yōu)惠的價(jià)格嘗到更加豐富的菜式,還可以在吃飯的時(shí)候和同事們增進(jìn)感情。
但是,隨著百度的員工越來越多,各個(gè)飯團(tuán)的管理變得繁雜起來。特別是為了照顧員工們越來越挑剔的胃,飯團(tuán)的點(diǎn)菜負(fù)責(zé)人的壓力也越來越大。現(xiàn)在,這個(gè)任務(wù)就交給“百度之星”了,因?yàn)椋銓⒁獮樗械陌俣蕊垐F(tuán)設(shè)計(jì)一個(gè)自動(dòng)點(diǎn)菜的算法。


飯團(tuán)點(diǎn)菜的需求如下:
1.經(jīng)濟(jì)是我們要考慮的一個(gè)因素,既要充分利用百度員工的午餐補(bǔ)助,又不能鋪張浪費(fèi)。因此,我們希望最后的人均費(fèi)用越接近12元越好。
2.菜式豐富是我們要考慮的另一個(gè)因素。為簡單起見,我們將各種菜肴的屬性歸結(jié)為葷菜,素菜,辛辣,清淡,并且每個(gè)菜只能點(diǎn)一次。
3.請謹(jǐn)記,百度飯團(tuán)在各大餐館享受8折優(yōu)惠。


輸入要求:
1.輸入數(shù)據(jù)第一行包含三個(gè)整數(shù)N,M,K(0<N<=16,0<M<=N,0<K<=12),分別表示菜單上菜的數(shù)目,飯團(tuán)需要點(diǎn)的菜的數(shù)目,就餐的人數(shù);
2.緊接著N行,每行的格式如下:
菜名(長度不超過20個(gè)字符) 價(jià)格(原價(jià),整數(shù)) 是否葷菜(1表示是,0表示否) 是否辛辣(1表示是,0表示否);
3.第N+2行是 a b c d 四個(gè)整數(shù),分別表示需要點(diǎn)的葷菜,素菜,辛辣,清淡菜的數(shù)目。例:
3 2 2
水煮魚 30 1 1
口水雞 18 1 1
清燉豆腐 12 0 0
1 1 1 1

?

輸出要求:
對(duì)于每組測試數(shù)據(jù),輸出數(shù)據(jù)包含M+1行,前M行每行包含一個(gè)菜名(按菜名在原菜單的順序排序)。第M+1行是人均消費(fèi),結(jié)果保留兩位小數(shù)。例:
口水雞
清燉豆腐
12.00


評(píng)分規(guī)則:
1.程序?qū)⑦\(yùn)行在一臺(tái)Linux機(jī)器上(內(nèi)存使用不作嚴(yán)格限制),在每一測試用例上運(yùn)行不能超過10秒,否則該用例不得分;
2.要求程序能按照輸入樣例的格式讀取數(shù)據(jù)文件,按照輸出樣例的格式將運(yùn)行結(jié)果輸出到標(biāo)準(zhǔn)輸出上。如果不能正確讀入數(shù)據(jù)和輸出數(shù)據(jù),該題將不得分;
3.該題目共有5個(gè)測試用例,每個(gè)測試用例為一個(gè)輸入文件。各測試用例占該題目分?jǐn)?shù)的比例分別為20%,20%,20%,20%,20%;
4.該題目10分。
*/
/*
算法介紹:
1。讀入數(shù)據(jù)。
2。以菜的個(gè)數(shù)為主序,采用回溯的方法依次處理每個(gè)菜的可能性,返回最好的點(diǎn)菜方法:
????? 即將問題轉(zhuǎn)化為:從N個(gè)不同的數(shù)中選出滿足要求的M個(gè)數(shù)。
????? 解決辦法為先從N個(gè)不同的數(shù)中選出M個(gè)數(shù),再判斷這M個(gè)數(shù)是否滿足要求,滿足要求則存儲(chǔ)到數(shù)組bestdish[],并根據(jù)當(dāng)前實(shí)際最佳金額與理論最佳金額的差值,實(shí)時(shí)更換數(shù)組bestdish[]的值,最后得到的數(shù)組bestdish[]就是最佳數(shù)組bestdish[]。
3。根據(jù)數(shù)組bestdish[],輸出結(jié)果。
*/

#include <iostream>
#include<fstream>
#include <time.h>

using namespace std;

const int MAX = 21;
double Min = 1000000;//存儲(chǔ)當(dāng)前實(shí)際最佳金額與理論最佳金額的差值
double pay; //存儲(chǔ)當(dāng)前實(shí)際最佳金額
double bestPay; //存儲(chǔ)所需的理論最佳金額,恰好每人12元
int N, M, K;
int hunCai;
int suCai;
int xinLa;
int qingDan;

class Dish{
public:
????? char name[MAX];
????? double price;
????? bool isMeat;
????? bool isAcridity;

????? void PutData(const char *na, double p, bool m, bool acr) //輸入數(shù)據(jù)
????? {
??????????? strcpy(name, na);
??????????? price = p;
??????????? isMeat = m;
??????????? isAcridity = acr;
????? }

????? void PrintData()
????? {
??????????? cout << name << ' ' << price << ' ' << isMeat << ' ' << isAcridity << endl;
????? }
};

void ReadData(const char *filename, Dish **obj);
double Abs(double a);
bool IsPass(const int pass[], const Dish *obj, double & sum);
void GetDishes(int num, int pos, const Dish *obj, int pass[], int bestDish[]);

int main()
{
?time_t startTime;
?time_t endTime;
?time(&startTime);

????? Dish *obj;

?ReadData("in3.txt", &obj);//讀入數(shù)據(jù)

?//cout << N << ' ' << M << ' ' << K << endl;
//?for (int i=0; i<N; i++)
//??????????? obj[i].PrintData();
//????? cout << hunCai << ' ' << suCai << ' ' << xinLa << ' ' << qingDan << endl;

????? bestPay = K * 12; //存儲(chǔ)所需的理論最佳金額,恰好每人12元
????? int *pass = new int[N+1]; //存儲(chǔ)已經(jīng)被點(diǎn)了的菜
????? int *bestDish = new int[N+1]; //存儲(chǔ)最佳被點(diǎn)了的菜

????? GetDishes(1, 0, obj, pass, bestDish); //以菜的個(gè)數(shù)用回溯的方法求最佳點(diǎn)菜方案
?????
????? for (int i=1; i<=M; i++)
????? {
??????????? cout << obj[bestDish[i]].name << endl;
????? }
????? printf("%.2f\n", pay / K);
?????
????? delete []pass;
????? delete []bestDish;
?????
?time(&endTime);
//?cout << difftime(endTime, startTime) << endl;

?getchar();
?return 0;
}

void GetDishes(int num, int pos, const Dish *obj, int pass[], int bestDish[])
{
????? if (num == M)//處理最后一個(gè)菜
????? {
??????????? for (int i=pos; i<N; i++)
??????????? {
????????????????? pass[num] = i;
????????????????? double sum = 0;
????????????????? if (IsPass(pass, obj, sum) && Abs(sum-bestPay)<Min) //若該道菜滿足口味要求,并最接近理論最佳金額
????????????????? {
??????????????????????? pay = sum;? //存儲(chǔ)當(dāng)前實(shí)際最佳金額
??????????????????????? Min = Abs(sum-bestPay);//存儲(chǔ)當(dāng)前最小差別
??????????????????????? for (int i=1; i<=M; i++)
????????????????????????????? bestDish[i] = pass[i];
????????????????? }
??????????? }
????? }
????? else //如果處理的不是最后一個(gè)菜,應(yīng)采用回溯方法以取得最優(yōu)解
????? {
??????????? for (int i=pos; i<N-M+num; i++)
??????????? {
???????????????? pass[num] = i;
???????????????? GetDishes(num+1, i+1, obj, pass, bestDish);
??????????? }
????? }
}

bool IsPass(const int pass[], const Dish *obj, double & sum)
{
????? int h = 0; //存儲(chǔ)實(shí)際已經(jīng)點(diǎn)了的葷菜
????? int s = 0; //存儲(chǔ)實(shí)際已經(jīng)點(diǎn)了的素菜
????? int x = 0; //存儲(chǔ)實(shí)際已經(jīng)點(diǎn)了的辛辣菜
????? int q = 0; //存儲(chǔ)實(shí)際已經(jīng)點(diǎn)了的清淡菜
????? for (int j=1; j<=M; j++)
????? {
??????????? sum += obj[pass[j]].price * 0.8;
??????????? if (obj[pass[j]].isMeat && h < hunCai)//分析該道菜的各種屬性
????????????????? h++;
??????????? else if (!obj[pass[j]].isMeat && s < suCai)
????????????????? s++;
??????????? else
????????????????? return false;
??????????? if (obj[pass[j]].isAcridity && x < xinLa)
????????????????? x++;
??????????? else if (!obj[pass[j]].isAcridity && q < qingDan)
????????????????? q++;
??????????? else
????????????????? return false;
????? }
????? return true;
}

double Abs(double a)
{
????? return (a > 0) ? a : -a;
}

void ReadData(const char *filename, Dish **obj)
{
????? fstream in(filename);
????? if (!in)
??????????? return ;?? //結(jié)束程序執(zhí)行

????? in >> N;
????? in >> M;
????? in >> K;

????? *obj = new Dish[N];
????? int n = 0;
????? while (!in.eof() && n < N)
????? {
??????????? char name[MAX];
??????????? double price;
??????????? bool isMeat;
??????????? bool isAcridity;

??????????? in >> name;
??????????? in >> price;
??????????? in >> isMeat;
??????????? in >> isAcridity;

??????????? (*obj)[n++].PutData(name, price, isMeat, isAcridity);
????? }
????? in >> hunCai;
????? in >> suCai;
????? in >> xinLa;
????? in >> qingDan;

????? in.close(); //關(guān)閉文件
}

Posted on 2006-05-30 13:53 夢想飛揚(yáng) 閱讀(1873) 評(píng)論(8)  編輯 收藏 引用

Feedback

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2006-06-15 16:50 by efafwedsa
汗~~~~~~~~運(yùn)行時(shí)內(nèi)存出錯(cuò)了

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2006-06-15 21:07 by goal00001111
不可能啊!
你沒有創(chuàng)建文件in3.txt到當(dāng)前目錄吧

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2007-05-21 00:29 by oyjpart
lz是不是寫的麻煩了點(diǎn)
#include <stdio.h>
#include <string.h>
#include <math.h>

const int N = 17;

int main() {
int i, a, b, c, d, x, best = -10000, rec = -1, nc, need, np, hun[N], la[N], su[N], dan[N], p[N], sum[4];
char name[N][100];
scanf("%d %d %d", &nc, &need, &np);
for(i = 0; i < nc; i++) {
scanf("%s %d %d %d", &name[i], &p[i], &hun[i], &la[i]);
su[i] = 1-hun[i]; dan[i] = 1-la[i];
}
scanf("%d %d %d %d", &a, &b, &c, &d);
for(x = 0; x < (1<<nc); ++x) {
memset(sum, 0, sizeof(sum));
int price = 0, cnt = 0;
for(i = 0; i < nc; ++i)
if( (x & (1<<i)) != 0) {
cnt++; price += p[i];
}

if(cnt != need || abs(price - np * 12) >= abs(best - np * 12)) continue;
for(i = 0; i < nc; ++i)
if( (x & (1<<i)) != 0) {
sum[0] += hun[i]; sum[1] += su[i];
sum[2] += la[i]; sum[3] += dan[i];
}

if(sum[0] == a && sum[1] == b && sum[2] == c && sum[3] == d) {
best = price; rec = x;
}
}
for(i = 0; i < nc; i++)
if( (rec & (1<<i)) != 0)
puts(name[i]);
printf("%.2lf\n", 0.8* best / np);
return 0;
}

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2007-05-21 00:35 by oyjpart
一點(diǎn)修改 if(cnt != need || abs(price - np * 12) >= abs(best - np * 12)) continue; 中的 12->15

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2008-12-13 14:40 by 遠(yuǎn)風(fēng)
貌似效率問題.....

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2009-05-07 22:42 by xxoo
懷疑那個(gè)給出的例子是怎么計(jì)算到12元的人均消費(fèi)....

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 "   回復(fù)  更多評(píng)論   

2009-11-19 21:56 by crazy
大哥 拿你的去搞半天還是有錯(cuò)誤 QQ442065168 希望能討論

# re: 我解百度之星題目之" 飯團(tuán)的煩惱 " [未登錄]  回復(fù)  更多評(píng)論   

2010-02-12 10:47 by leo

#include <stdio.h>
#include <string.h>
#include <math.h>

const int N = 17;

int main() {
int i, a, b, c, d, x, best = -10000, rec = -1, nc, need, np, hun[N], la[N], su[N], dan[N], p[N], sum[4];
char name[N][100];
scanf("%d %d %d", &nc, &need, &np);
for(i = 0; i < nc; i++) {
scanf("%s %d %d %d", &name[i], &p[i], &hun[i], &la[i]);
su[i] = 1-hun[i]; dan[i] = 1-la[i];
}
scanf("%d %d %d %d", &a, &b, &c, &d);
for(x = 0; x < (1<<nc); ++x) {
memset(sum, 0, sizeof(sum));
int price = 0, cnt = 0;
for(i = 0; i < nc; ++i)
if( (x & (1<<i)) != 0) {
cnt++; price += p[i];
}



if(cnt != need || abs(price - np * 15) >= abs(best - np * 15)) continue;
for(i = 0; i < nc; ++i)
if( (x & (1<<i)) != 0)
{
sum[0] += hun[i]; sum[1] += su[i];
sum[2] += la[i]; sum[3] += dan[i];
}

if(sum[0] == a && sum[1] == b && sum[2] == c && sum[3] == d) {
best = price; rec = x;
}
}
for(i = 0; i < nc; i++)
if( (rec & (1<<i)) != 0)
puts(name[i]);
printf("%.2lf\n", 0.8* best / np);
return 0;
}



只有注冊用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成黄导航| 玖玖综合伊人| 欧美77777| 欧美日韩一二三四五区| 这里只有精品视频| 99视频日韩| 一区二区三区日韩| 一区二区三区回区在观看免费视频| 欧美特黄a级高清免费大片a级| 99热这里只有精品8| 亚洲素人在线| 国产女主播视频一区二区| 久久在线视频| 尤物九九久久国产精品的特点| 亚洲欧美在线一区二区| 欧美成人69av| 亚洲在线成人| 在线一区欧美| 国产在线欧美日韩| 欧美精品videossex性护士| 亚洲私人影院| 亚洲精品之草原avav久久| 久久综合色综合88| 久久精品国产亚洲高清剧情介绍| 欧美三日本三级少妇三2023| 亚洲视屏在线播放| 99精品国产高清一区二区| 欧美日韩国产区| 亚洲欧美日韩一区二区三区在线观看| 亚洲春色另类小说| 亚洲精品孕妇| 国内精品久久久久久久果冻传媒 | 欧美高清自拍一区| 欧美1区视频| 欧美国产激情二区三区| 欧美日韩精品一区二区天天拍小说 | 在线综合欧美| 欧美伦理影院| 亚洲一区久久久| 欧美在线二区| 亚洲免费观看在线观看| 国产欧美丝祙| 亚洲高清123| 韩国免费一区| 国产一区二区三区自拍| 极品少妇一区二区三区| 久久综合九色综合欧美就去吻| 欧美1区免费| 久久久亚洲高清| 久久久久一区| 久久久久久久久久久久久女国产乱| 国产日韩欧美一区| 免费观看一区| 欧美体内she精视频| 国产精品嫩草久久久久| 国产日韩专区| 欧美精品一区二区精品网| 午夜一级久久| 欧美高清在线一区| 欧美成人免费播放| 久久久精品网| 久久久亚洲精品一区二区三区 | 在线观看亚洲视频啊啊啊啊| 国产伦精品一区二区三区高清版 | 欧美一区免费视频| 国产视频亚洲| 国产色爱av资源综合区| 欧美午夜宅男影院在线观看| 国产精品成人一区二区| 欧美精品1区| 欧美在线一区二区三区| 另类欧美日韩国产在线| 99国产精品一区| 欧美天堂亚洲电影院在线播放| 久热re这里精品视频在线6| 欧美a级在线| 欧美精品一区在线播放| 国产精品久久久久77777| 国产精品一级| 极品少妇一区二区三区精品视频| 亚洲欧洲一区二区在线播放| 亚洲精品综合| 欧美高清日韩| 欧美电影免费观看大全| 亚洲欧美色婷婷| 久久人人超碰| 亚洲久久一区二区| 亚洲福利视频专区| 欧美精品一区二区三区久久久竹菊 | 男人天堂欧美日韩| 久久久一区二区三区| 一区二区三区在线看| 久久av在线看| 美女脱光内衣内裤视频久久影院| 91久久久久久久久| 欧美成人免费在线观看| 国产精品劲爆视频| 久久精品日产第一区二区| 亚洲激情偷拍| 欧美日韩理论| 欧美色区777第一页| 久久欧美中文字幕| 亚洲永久免费| 日韩一级不卡| 久久精品中文字幕一区| 国产视频精品xxxx| 午夜精品短视频| 欧美.www| 欧美中文在线观看国产| 久久手机精品视频| 亚洲精品中文字幕有码专区| 久久精品国产第一区二区三区最新章节| 亚洲精品欧美日韩专区| 国产精品白丝jk黑袜喷水| 久久久av水蜜桃| 欧美精品亚洲二区| 欧美成人综合网站| 亚洲激情成人| 久热精品视频在线观看| 亚洲天堂av在线免费观看| 欧美日韩福利视频| 亚洲精品一区二区三区在线观看| 欧美一级片久久久久久久| 亚洲国产你懂的| 国产精品mm| 欧美激情成人在线| 麻豆亚洲精品| 今天的高清视频免费播放成人 | 免费观看30秒视频久久| 亚洲欧美日韩专区| 国产精品任我爽爆在线播放 | 免费久久精品视频| 国产乱码精品一区二区三区忘忧草 | 久久久久久久综合狠狠综合| 欧美mv日韩mv国产网站| 久久精品最新地址| 国产私拍一区| 久久精品91| 亚洲国产精品一区二区www在线| 狠狠色2019综合网| 欧美一区二粉嫩精品国产一线天| 国内精品视频久久| 久久女同精品一区二区| 欧美有码视频| 国产一区自拍视频| 久久久人成影片一区二区三区| 亚洲精品一区二区在线观看| 亚洲国产日韩一区二区| 欧美肉体xxxx裸体137大胆| 一区二区三区四区五区在线| 蜜臀av一级做a爰片久久| 亚洲第一中文字幕在线观看| 性刺激综合网| 亚洲精品乱码久久久久久日本蜜臀| 一区二区三区成人| 欧美精品尤物在线| 亚洲自拍偷拍一区| 午夜久久福利| 日韩视频免费大全中文字幕| 欧美专区日韩专区| 午夜精品久久久久久久白皮肤 | 性色一区二区三区| 亚洲毛片在线| 日韩视频在线播放| 亚洲电影免费观看高清完整版在线观看 | 先锋资源久久| 久久国产婷婷国产香蕉| av成人国产| 午夜精品在线| 亚洲欧美影音先锋| 玖玖玖免费嫩草在线影院一区| 亚洲精品乱码久久久久久蜜桃91 | 一二美女精品欧洲| 国产欧美一区在线| 国产精品免费电影| 欧美国产日韩在线| 欧美韩日一区二区| 国产精品久久久久aaaa九色| 国产精品国产三级国产普通话99| 国产亚洲一区二区三区在线播放| 欧美午夜欧美| 影音先锋久久| 午夜视频一区二区| 免费成人美女女| 日韩一级在线| 欧美不卡三区| 国产一区二区在线观看免费播放 | 欧美不卡一区| 国产精品大片免费观看| 国产一区二区你懂的| 在线一区二区三区四区五区| 欧美一级片久久久久久久| 制服丝袜激情欧洲亚洲| 久久免费精品日本久久中文字幕| 国产精品嫩草99av在线| 亚洲高清久久网| 亚洲精品你懂的| 欧美成人精品影院| 亚洲一区二区三区免费观看| av不卡免费看|