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

The Fourth Dimension Space

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

9.20上海東華賽區(qū)網絡賽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,可是究竟怎么動態(tài)規(guī)劃呢?想了半天也想不出來,一直卡在這個題上,后來有個同學提示了我方法,這才明白過來,原來這里面還有位運算,看來我平時缺少位運算方面的訓練了。。。哎 我還是太水。。。
分析:這個題的DP思想是把所有1 to 2^n-1的狀態(tài)所對應的健康值都算出來,然后再其中取一個最大值。我們看看他是如何狀態(tài)轉移的:
            假設 n=3  現在考慮 1 1 1(7,從左到右分別是第3,2,1種藥品) 這種狀態(tài),如果第三種藥品不使用,那么相當于0 1 1 產生的 總健康值;
            這個健康值已經由它的子結構得到。
            如果使用第三種藥品,那么我們進行一次DFS,將他對應的所有的有效狀態(tài)(無效狀態(tài)對應為0即可)對應的健康值加起來,這樣就得到了
            使用第三種藥物的總健康值。
            我們將上述子結構和DFS得到的結果相加,便得到了當前狀態(tài)下的總健康值。
我們做一個循環(huán),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 閱讀(1309) 評論(4)  編輯 收藏 引用

評論

# re: 9.20上海東華賽區(qū)網絡賽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上海東華賽區(qū)網絡賽H題 health (Dp+Dfs+Bit Operation) 2009-09-21 19:08 abilitytao

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

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

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

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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品一级爱片| 欧美色欧美亚洲高清在线视频| 噜噜噜91成人网| 午夜精品一区二区三区在线播放| 噜噜噜久久亚洲精品国产品小说| 一区二区三区在线不卡| 国产精品久久久久久av福利软件| 欧美一区成人| 亚洲免费视频中文字幕| 日韩午夜视频在线观看| 亚洲国产一区视频| 欧美福利精品| 免费观看成人| 免费试看一区| 亚洲国产毛片完整版 | 久久精品一区二区三区不卡牛牛| 亚洲日本成人网| 亚洲人成在线播放| 在线亚洲一区| 久久精品国产亚洲5555| 国产一区91| 亚洲乱码国产乱码精品精98午夜 | 亚洲欧美日韩综合| 亚洲一区二区在| 久久av老司机精品网站导航| 久久综合九色99| 欧美视频中文字幕| 国内外成人免费激情在线视频网站| 伊人久久亚洲影院| 中国亚洲黄色| 蜜臀av一级做a爰片久久| 亚洲精品久久视频| 欧美在线亚洲在线| 欧美顶级大胆免费视频| 国产精品午夜av在线| 亚洲人成小说网站色在线| 午夜精品福利在线| 一本色道久久综合狠狠躁篇的优点 | 亚洲黄色高清| 99精品国产在热久久| 亚洲欧美偷拍卡通变态| 免费高清在线一区| 一区在线观看视频| 欧美在线观看视频一区二区| 亚洲国产精品成人久久综合一区 | 久久久久久久网| 欧美日韩在线一区二区三区| 亚洲人永久免费| 欧美aⅴ99久久黑人专区| 久久精品视频免费| 亚洲国产经典视频| 亚洲第一精品夜夜躁人人躁| 久久网站免费| 日韩午夜激情| 亚洲一区二区在线免费观看视频| 国产精品区免费视频| 亚洲午夜久久久| 午夜视频在线观看一区| 亚洲第一页在线| 99天天综合性| 亚洲国产99精品国自产| 欧美国产一区在线| 欧美日韩午夜| 欧美激情精品久久久久久久变态| 美女图片一区二区| 亚洲免费视频成人| 老司机精品视频一区二区三区| 亚洲欧洲日本在线| 西瓜成人精品人成网站| 亚洲网站视频| 久久综合色婷婷| 亚洲欧美制服另类日韩| 欧美高清视频在线| 久久综合电影| 国产日韩一区在线| 中文在线一区| 亚洲伦理中文字幕| 久久尤物电影视频在线观看| 性久久久久久久久久久久| 欧美日本不卡高清| 欧美福利在线| 久久这里只有| 久久久www成人免费毛片麻豆| 美女精品国产| 免费观看成人| 欧美精品电影| 欧美色中文字幕| 国产精品久久久亚洲一区 | 久久精品视频在线免费观看| avtt综合网| 亚洲永久免费av| 国产精品亚洲激情| 亚洲免费在线看| 久久美女性网| 亚洲三级电影在线观看| 欧美视频一区二区三区| 亚洲欧美日韩国产一区二区三区| 久久精品国产一区二区三区免费看 | 国产精品一二一区| 一区二区三区回区在观看免费视频| 亚洲国产成人av| 欧美日韩人人澡狠狠躁视频| 亚洲欧美日韩在线播放| 欧美激情1区2区3区| 亚洲欧美综合另类中字| 伊人成人在线视频| 国产精品美女久久久久av超清| 久久精品亚洲热| 亚洲欧美日韩国产成人精品影院| 榴莲视频成人在线观看| 亚洲综合好骚| 一区二区三区四区精品| 136国产福利精品导航网址应用| 美女精品在线| 亚洲欧美中文在线视频| 99视频精品| 日韩午夜中文字幕| 欧美jjzz| 久久综合久久久| 国产又爽又黄的激情精品视频| 亚洲社区在线观看| 亚洲精品你懂的| 亚洲在线免费| 国产精品久久久久久影视| 欧美精品一区在线发布| 欧美激情精品久久久久久蜜臀 | 久久蜜桃精品| 欧美一区二区三区免费观看| 午夜精品福利在线| 美女爽到呻吟久久久久| 免费观看亚洲视频大全| 老司机精品导航| 亚洲电影毛片| 中国成人黄色视屏| 欧美一区二区在线播放| 久久人人97超碰国产公开结果| 久久久久高清| 亚洲在线观看| 欧美特黄一区| 亚洲综合日韩| 欧美一区二区视频在线观看| 欧美一区永久视频免费观看| 卡一卡二国产精品| 欧美日韩理论| 国产在线精品一区二区中文 | 亚洲巨乳在线| 亚洲一区免费看| 欧美成人高清| 在线观看日韩www视频免费| 亚洲淫性视频| 国产欧美日韩不卡| 在线精品亚洲一区二区| 久久精品二区亚洲w码| 久久综合九色综合欧美就去吻 | 久久深夜福利免费观看| 欧美精品久久久久久| 久久久国产一区二区三区| 欧美精品一卡| 欧美成人精品一区| 国内精品久久久久久| 亚洲三级影院| 欧美激情女人20p| 亚洲伦理在线| 亚洲一级特黄| 国产精品视频久久久| 欧美一区二区免费视频| 亚洲主播在线播放| 国产精品一区二区三区观看| 亚洲欧美制服中文字幕| 欧美亚洲一区二区在线| 国内精品久久久久久久97牛牛| 久久久亚洲国产天美传媒修理工| 欧美一区二区三区久久精品茉莉花 | 亚洲欧美日韩一区在线| 欧美福利视频在线| 亚洲国产精品一区在线观看不卡| 国产免费成人在线视频| 先锋亚洲精品| 久久精品国产99| 一区二区三区不卡视频在线观看 | 亚洲欧美卡通另类91av| 先锋a资源在线看亚洲| 亚洲精品视频中文字幕| 亚洲视频日本| 日韩午夜激情电影| 久久久久国产一区二区三区四区| 亚洲另类视频| 亚洲一区二区精品| 看片网站欧美日韩| 亚洲特黄一级片| 激情视频一区二区三区| 欧美日产国产成人免费图片| 亚洲综合电影| 日韩视频一区二区三区在线播放免费观看| 亚洲一区二区精品在线观看| 在线免费观看成人网| 国产精品激情av在线播放| 久久久亚洲高清| 欧美亚洲视频在线观看| 欧美在线视频一区二区|