• <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>

            A Za, A Za, Fighting...

            堅(jiān)信:勤能補(bǔ)拙

            PKU 1010 STAMPS

            問(wèn)題:
            http://poj.org/problem?id=1010

            思路:
            題目比較難理解,解題的話就是DFS
            整整花了我一個(gè)晚上,終于AC了,(*^__^*) 嘻嘻……
            雖然時(shí)間花了挺久,雖然自己的解法時(shí)間需要500+MS,雖然存在其他更優(yōu)的解法,雖然......,但還是相當(dāng)有成就感,完全是我自己寫(xiě)出來(lái)的
            如果這題放在5個(gè)月之前,估計(jì)完全不知道怎么去寫(xiě)
            在沒(méi)AC之前,我一直想著自己還是原來(lái)那么菜,現(xiàn)在,至少可以說(shuō),比5個(gè)月之前的我已經(jīng)強(qiáng)了
            繼續(xù)努力,F(xiàn)ighting...

            代碼:
              1 /* 388K 547MS */
              2 #include<stdio.h>
              3 #include<string.h>
              4 #include<stdlib.h>
              5 #define MAX_LEN 65 /* maximum number of different types of stamps */
              6 #define UPPER 4 /* maximum number of stamps */
              7 int types, stamps[MAX_LEN];
              8 int request;
              9 int maxdf, minusd, high, tie, exist, mark[MAX_LEN], ans[MAX_LEN];
             10 
             11 int
             12 compare(const void *arg1, const void *arg2)
             13 {
             14     return (*(int *)arg1)-(*(int *)arg2);
             15 }
             16 
             17 void
             18 output()
             19 {
             20     int i, j;
             21     if(!exist) {
             22         printf("%d ---- none\n", request);
             23         return;
             24     }
             25     printf("%d (%d): ", request, maxdf);
             26     if(tie)
             27         printf("tie\n");
             28     else {
             29         for(i=0; i<types; i++
             30             for(j=0; j<ans[i]; j++)
             31                 printf("%d ", stamps[i]);
             32         printf("\n");
             33     }
             34 }
             35 
             36 void
             37 dfs(int remain, int index, int curdf, int curusd, int curhigh)
             38 {
             39     int i, flag = 0;
             40     if(remain == 0) {
             41         if(curdf < maxdf)
             42             return;
             43         /* satisfy the conditions: UPDATE */
             44         if((curdf>maxdf) || (curdf==maxdf&&curusd<minusd) || (curdf==maxdf&&curusd==minusd&&curhigh>high)) {
             45             maxdf = curdf;
             46             minusd = curusd;
             47             high = curhigh;
             48             exist = 1;
             49             tie = 0/* remember reset 'tie' */
             50             memcpy(ans, mark, sizeof(int)*MAX_LEN); /* copy the current best to 'ans' */
             51             return;
             52         }
             53         /* TIE occurred */
             54         if(curdf==maxdf && curusd==minusd && curhigh==high) {
             55             tie = 1;
             56             return;
             57         }
             58         return;
             59     }
             60     /* still exist several stamps unmarked */
             61     for(i=index; i<types; i++) { /* Attention: i starts from 'index', which avoid duplicates such as '1 3' and '3 1' */
             62         if(!mark[i] && stamps[i]<=remain && curusd+1<=UPPER) {
             63             ++mark[i];
             64             flag = 1;
             65             dfs(remain-stamps[i], i+1, curdf+1, curusd+1, stamps[i]);
             66             --mark[i];
             67         }
             68     }
             69     /* all available stamps have been marked */
             70     if(!flag) {
             71         for(i=types-1; i>=0; i--) {
             72             if(stamps[i]<=remain && curusd+1<=UPPER) {
             73                 ++mark[i];
             74                 dfs(remain-stamps[i], 0, curdf, curusd+1, curhigh);
             75                 --mark[i];
             76             }
             77         }
             78     }
             79 }
             80 
             81 int
             82 main(int argc, char **argv)
             83 {
             84     while(1) {
             85         types = 0;
             86         if(scanf("%d"&stamps[types]) == EOF)
             87             break;
             88         ++types;
             89         while(scanf("%d"&stamps[types]) && stamps[types])
             90             ++types;
             91         qsort(stamps, types, sizeof(int), compare); /* ascent order */
             92 
             93         while(scanf("%d"&request) && request) { /* each request */
             94             maxdf = high = 0;
             95             minusd = MAX_LEN+1;
             96             exist = tie = 0;
             97             memset(mark, 0sizeof(mark));
             98             dfs(request, 0000);
             99             output();
            100         }
            101     }
            102     return 0;
            103 }

            posted on 2010-10-22 00:38 simplyzhao 閱讀(311) 評(píng)論(0)  編輯 收藏 引用 所屬分類: B_搜索

            導(dǎo)航

            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国内精品久久人妻互换 | 一本大道久久东京热无码AV| 亚洲天堂久久精品| 日韩欧美亚洲综合久久影院Ds| 久久精品国产色蜜蜜麻豆| 国产精品久久久久久影院| 久久久久久A亚洲欧洲AV冫| 久久精品aⅴ无码中文字字幕不卡| WWW婷婷AV久久久影片| 久久久久无码专区亚洲av| 久久狠狠高潮亚洲精品| 久久久久久免费视频| 亚洲国产精品婷婷久久| 久久久久99精品成人片试看 | 99久久伊人精品综合观看| 国产成人精品三上悠亚久久| 国产高清国内精品福利99久久| 色欲久久久天天天综合网| 青青草原综合久久大伊人导航| 99久久中文字幕| 亚洲午夜久久久久久久久电影网 | 精品久久久久久成人AV| 久久精品中文字幕一区| 久久最新免费视频| 99久久亚洲综合精品网站| 97久久超碰国产精品2021| 色婷婷综合久久久中文字幕| 少妇无套内谢久久久久| 亚洲精品成人久久久| 一级做a爰片久久毛片毛片| 久久人人爽人人爽AV片| 日韩欧美亚洲国产精品字幕久久久| 99久久婷婷国产综合精品草原| 久久精品国产福利国产秒| 久久青草国产手机看片福利盒子| 午夜欧美精品久久久久久久| 久久久久久国产a免费观看黄色大片| 久久精品国产WWW456C0M| 亚洲第一永久AV网站久久精品男人的天堂AV| 精品国产一区二区三区久久| 色综合久久中文色婷婷|