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

The Fourth Dimension Space

枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

9.20上海東華賽區網絡賽H題 health (Dp+Dfs+Bit Operation)

Health

 

Unfortunately YY gets ill, but he does not want to go to hospital. His girlfriend LMY gives him N kinds of medicine, which may be helpful. It is not a good idea to take all of them, since taking several different kinds of medicine may cause undesirable side effects. Formally speaking, for each subset S of the N kinds of medicine (excluding the empty set), it has a health value v(S). If YY chooses to take a combination T of the medicines, the final effect to his illness is the sum of health values of all non-empty subsets of T.

YY wants to get healthy as quickly as possible, so the final effect of the medicines he takes should be as great as possible. Of course, YY may choose to take nothing, thus having a zero final effect, if he is too unlucky that all other alternatives he can get are negative…

 

Input

 Input contains multiple test cases.

For each test case, the first line contains a positive integer N (N16), the number of different kinds of medicine YY received from LMY.

The second line contains a single integer M (0M2N).

M lines follow, representing a list of health values.

Each of the M lines contains 2 integers, s (1s<2N) and v (-10000≤v≤10000), indicating a subset of the N kinds of medicine and its health value. Write s in binary representation and add leading zeros if needed to make it exactly N binary digits. If the ith binary digit of s is 1, then the subset it represents includes the ith kind of medicine; otherwise it does not.

It is guaranteed that no two lines of the list describe the same subset. All non-empty subsets that do not appear in the list have health value 0.

Input ends with N=0.

 

Output

 

For each test case, output one line with only one integer, the maximum final effect that can be achieved.

 

Sample Input

2

3

1 10

2 -1

3 100

0

 Sample Output

 109





比賽的時候,看到這道題過的人很多,但是自己卻沒什么思路,非常郁悶,一看題就知道肯定是個DP,可是究竟怎么動態規劃呢?想了半天也想不出來,一直卡在這個題上,后來有個同學提示了我方法,這才明白過來,原來這里面還有位運算,看來我平時缺少位運算方面的訓練了。。。哎 我還是太水。。。
分析:這個題的DP思想是把所有1 to 2^n-1的狀態所對應的健康值都算出來,然后再其中取一個最大值。我們看看他是如何狀態轉移的:
            假設 n=3  現在考慮 1 1 1(7,從左到右分別是第3,2,1種藥品) 這種狀態,如果第三種藥品不使用,那么相當于0 1 1 產生的 總健康值;
            這個健康值已經由它的子結構得到。
            如果使用第三種藥品,那么我們進行一次DFS,將他對應的所有的有效狀態(無效狀態對應為0即可)對應的健康值加起來,這樣就得到了
            使用第三種藥物的總健康值。
            我們將上述子結構和DFS得到的結果相加,便得到了當前狀態下的總健康值。
我們做一個循環,i from 1to 2^n-1 ,把所有情況對應的健康值算出來,然后再其中取一個最大值即可。(位運算很重要!)

#include<iostream>
using namespace std;
#define MAX (1<<17)

int value[MAX];
int dp[MAX];
int bin[20];
int n,m;
int sum;
int ans;

void dfs(int i,int p)
{

    
if(i<0)
    
{
        sum
+=value[p];
        
return ;
    }

    
else if(bin[i]==1)
        dfs(i
-1,p+(1<<i));
    dfs(i
-1,p);
}



void solve(int n)
{
    
int now=( (1<<n)-1 );
    
int i;
    
int j=1;
    
int k=-1;
    
for(i=1;i<=now;i++)
    
{
        sum
=0;
        memset(bin,
0,sizeof(bin));
        j
=1;
        k
=-1;
        
while(j*2<=i)
        
{

            
if(j&&i)
            
{
                k
++;
                bin[k]
=1;
            }

            
else 
            
{
                k
++;
                bin[k]
=0;
            }

            j
*=2;

        }

        dfs(k,j);
        dp[i]
=dp[i-j]+sum;
        
if(dp[i]>ans)
        ans
=dp[i];
    }



}



int main()
{
    
int i;
    
while(scanf("%d",&n))
    
{
        ans
=0;
        memset(value,
0,sizeof(value));
        
if(n==0)
            
break;
        scanf(
"%d",&m);
        
for(i=1;i<=m;i++)
        
{

            
int a,b;
            scanf(
"%d%d",&a,&b);
            value[a]
=b;
        }

        solve(n);
        printf(
"%d\n",ans);

    }

    
return 0;
}






做了這個題,突然想起了將10進制轉化成2進制的方法,不斷模除2,取余數,但是一直沒有深究,今天終于明白了,原來如果把這個十進制數考慮成2進制,右移一位相當于除以2,模除2就是把最后那一位給取出來了,不斷的模除2,就把這個2進制數一位一位的取出。
PS :感謝那位提示我思路的同學

posted on 2009-09-21 14:28 abilitytao 閱讀(1317) 評論(4)  編輯 收藏 引用

評論

# re: 9.20上海東華賽區網絡賽H題 health (Dp+Dfs+Bit Operation) 2009-09-21 15:48 OwnWaterloo

> 原來如果把這個十進制數考慮成2進制
在C/C++中,整數本來就是按2進制而不是按10進制存儲的。
不存在考慮成2進制的說法。

> 突然想起了將10進制轉化成2進制的方法
10進制是表象, 2進制才是本質。
10進制只存在于輸入輸出的過程中, 變量最終是按2進制存儲。



> 右移一位相當于除以2,模除2就是把最后那一位給取出來了
> 不斷的模除2,就把這個2進制數一位一位的取出。
int i,d;
d = i % 2u;
i /= 2u;

如果你使用的編譯器不是古董,第2、3行代碼也會分別被編譯為位與、移位—— 不一定真的需要寫為 & , >>= —— 而不是除法。

  回復  更多評論   

# re: 9.20上海東華賽區網絡賽H題 health (Dp+Dfs+Bit Operation) 2009-09-21 19:08 abilitytao

@OwnWaterloo
呵呵 謝謝指點 學習了^_^  回復  更多評論   

# re: 9.20上海東華賽區網絡賽H題 health (Dp+Dfs+Bit Operation) 2009-09-21 19:47 qwe

當時也想到了 , 因為這復雜度沒敢寫!LZ你能分析下這復雜度嗎?  回復  更多評論   

# re: 9.20上海東華賽區網絡賽H題 health (Dp+Dfs+Bit Operation) 2009-09-30 18:09 abilitytao

@qwe
最低2^16 最高2^32
折中一下 似乎可以接受 對了 請問你有更好的方法嗎?   回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            欧美日韩一区二区三区四区在线观看 | 午夜精品久久久久久久99热浪潮| 91久久黄色| 欧美 日韩 国产 一区| 久久久999国产| 久久久久9999亚洲精品| 久久久久久久精| 欧美电影免费观看网站| 亚洲激情自拍| 亚洲一区二区三区免费视频| 亚洲欧美在线网| 国产手机视频精品| 国产精品欧美日韩| 国产精品久久久一区二区三区| 欧美午夜无遮挡| 国产综合欧美| av成人老司机| 久久精品99久久香蕉国产色戒| 久久在线免费观看| 一区二区免费在线观看| 欧美在线观看视频一区二区| 女女同性女同一区二区三区91| 欧美日本韩国一区| 国内精品久久国产| 亚洲视频一区在线| 免费观看成人| 亚洲在线视频一区| 欧美二区乱c少妇| 国产精品网站在线观看| 亚洲激情六月丁香| 久久久久综合一区二区三区| 亚洲区国产区| 欧美专区日韩视频| 欧美午夜视频在线| 亚洲精品视频在线观看免费| 欧美一区二区黄| 亚洲日本成人| 久久女同精品一区二区| 国产美女在线精品免费观看| 一本久久综合亚洲鲁鲁五月天| 久久在线免费观看| 亚洲欧美激情视频| 欧美视频一区二区三区四区| 亚洲激情一区二区| 欧美阿v一级看视频| 欧美在线免费观看亚洲| 国产精品美女久久久久av超清| 一本色道久久综合狠狠躁篇的优点 | 欧美三级在线播放| 亚洲欧洲在线看| 久久婷婷久久| 欧美一区二区网站| 国产日韩欧美亚洲| 欧美一区国产一区| 亚洲香蕉成视频在线观看| 欧美国产在线观看| 亚洲日本黄色| 亚洲精品1234| 欧美精品色一区二区三区| 亚洲国产天堂久久国产91| 美日韩精品免费观看视频| 欧美在线不卡视频| 激情六月综合| 欧美视频中文在线看| ●精品国产综合乱码久久久久| 一区二区三区四区五区在线| 亚洲国产视频一区| 欧美成人中文字幕在线| 亚洲激情视频在线播放| 亚洲高清视频的网址| 欧美国产视频日韩| 一本色道**综合亚洲精品蜜桃冫| 欧美激情黄色片| 欧美精品97| 亚洲曰本av电影| 亚洲免费在线视频一区 二区| 国产精品爽爽爽| 久久久久一区二区三区| 久久亚洲精品一区| 亚洲伦理精品| 亚洲午夜激情网页| 怡红院精品视频| 亚洲欧洲在线免费| 国产精品久久久久9999高清| 久久精选视频| 欧美成人自拍视频| 亚洲午夜女主播在线直播| 亚洲永久免费视频| 亚洲国产电影| 在线视频中文亚洲| 国产一区二区三区在线播放免费观看| 久久久蜜桃精品| 欧美日韩不卡合集视频| 欧美一区二区三区精品| 久久青青草原一区二区| 中文精品一区二区三区| 欧美在线不卡视频| 夜夜嗨av一区二区三区四区| 亚洲欧美日韩中文播放| 亚洲人成网站777色婷婷| 亚洲五月六月| 亚洲日本视频| 久久av红桃一区二区小说| 一本色道久久88亚洲综合88| 久久久久国产精品一区| 亚洲性av在线| 欧美成人精品影院| 久久久一区二区三区| 欧美色另类天堂2015| 嫩草国产精品入口| 国产日韩欧美高清免费| 亚洲毛片av在线| 在线播放日韩欧美| 香蕉乱码成人久久天堂爱免费| 99精品视频免费全部在线| 久久免费的精品国产v∧| 欧美在线精品免播放器视频| 欧美日韩精品免费| 亚洲国产一区二区a毛片| 一区在线观看| 亚洲永久免费av| 亚洲永久免费观看| 欧美日韩美女在线| 亚洲区第一页| 99精品视频免费观看| 老司机成人网| 鲁大师成人一区二区三区| 久久人人爽人人| 国产美女搞久久| 国产日韩在线视频| 亚洲尤物在线| 亚洲一区二区动漫| 欧美精品尤物在线| 欧美一区日韩一区| 久久精品国产欧美亚洲人人爽| 亚洲私拍自拍| 欧美日韩国产色视频| 亚洲精品国产精品国自产观看| 黄色成人免费观看| 久久久午夜视频| 免费中文字幕日韩欧美| 一区三区视频| 欧美刺激午夜性久久久久久久| 欧美韩日一区二区| 亚洲精品国产拍免费91在线| 欧美成人精品激情在线观看| 91久久精品久久国产性色也91| 亚洲另类春色国产| 国产精品成人一区二区网站软件| 亚洲伦理网站| 午夜视频在线观看一区二区三区| 国产精品视频免费一区| 亚洲女人天堂成人av在线| 亚洲欧洲av一区二区三区久久| 国产精品区一区二区三区| 午夜精品短视频| 猛干欧美女孩| 亚洲另类一区二区| 欧美欧美天天天天操| 99视频在线观看一区三区| 欧美在线视频全部完| 国外成人性视频| 久久久之久亚州精品露出| 欧美激情综合| 亚洲午夜电影| 国产一区91精品张津瑜| 久久婷婷色综合| 99热在线精品观看| 久久久久欧美| 亚洲深夜福利| 伊人婷婷久久| 国产精品久久久久久久电影| 欧美一级视频免费在线观看| 久久精品国产免费看久久精品| 亚洲黄色小视频| 国产精品久久久久久亚洲毛片| 欧美中文在线视频| 日韩天天综合| 欧美激情第9页| 亚洲欧美一区二区视频| 韩国精品久久久999| 欧美刺激性大交免费视频| 亚洲图片欧美一区| 久久久久久久波多野高潮日日| 日韩一区二区电影网| 国产女主播一区二区三区| 欧美影院成人| 国产精品久久久一区二区三区| 久久琪琪电影院| 日韩亚洲欧美高清| 欧美成人免费在线视频| 亚洲一区国产精品| 亚洲精品在线三区| 精品动漫一区二区| 欧美偷拍一区二区| 欧美大成色www永久网站婷| 香蕉亚洲视频| 亚洲网站在线看| 亚洲欧洲另类国产综合| 久久精品亚洲国产奇米99|