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

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>
            免费欧美网站| 韩国成人福利片在线播放| 久久亚洲精品网站| 亚洲精品午夜精品| 麻豆精品网站| 玖玖视频精品| 久久综合成人精品亚洲另类欧美| 中日韩午夜理伦电影免费| 最新成人av在线| 欧美激情1区| 欧美激情第一页xxx| 免费成人毛片| 欧美一级理论片| 欧美与黑人午夜性猛交久久久| 亚洲影院高清在线| 午夜精品免费视频| 欧美一区二区三区喷汁尤物| 欧美一区日本一区韩国一区| 欧美在线高清视频| 欧美一级专区| 宅男精品视频| 午夜在线观看免费一区| 久久av二区| 蜜臀久久99精品久久久久久9 | 玖玖综合伊人| 狼狼综合久久久久综合网| 久久这里只精品最新地址| 女仆av观看一区| 欧美日韩高清一区| 国产精品私拍pans大尺度在线| 欧美激情在线观看| 欧美四级在线观看| 国内外成人免费激情在线视频网站 | 国产一区高清视频| 国产美女精品视频| 国内自拍亚洲| 夜夜狂射影院欧美极品| 最近中文字幕mv在线一区二区三区四区 | 国产精品久久久久久久久| 国产偷自视频区视频一区二区| 亚洲成人在线观看视频| 中文一区在线| 老鸭窝亚洲一区二区三区| 亚洲黄色高清| 欧美亚洲尤物久久| 欧美国产日产韩国视频| 国产欧美日韩亚洲一区二区三区| 亚洲电影欧美电影有声小说| 国产精品久久网站| 亚洲人体偷拍| 久久精品国产第一区二区三区最新章节 | 夜夜嗨av一区二区三区网站四季av| 亚洲一区二区三区视频| 免费亚洲一区二区| 欧美日精品一区视频| 欧美特黄a级高清免费大片a级| 在线观看欧美黄色| 亚洲欧美日韩精品在线| 欧美激情久久久| 欧美一区二区在线看| 欧美精品在线一区| 亚洲二区在线| 久久婷婷麻豆| 午夜精品免费| 美女福利精品视频| 国产亚洲高清视频| 久久9热精品视频| 亚洲影视在线播放| 国产女人水真多18毛片18精品视频| 午夜精品久久久久久久久久久| 一区二区三区精品| 国产模特精品视频久久久久| 久久久久久久精| 玖玖在线精品| 亚洲一品av免费观看| 亚洲欧美日韩中文播放| 激情五月综合色婷婷一区二区| 欧美1区3d| 欧美视频免费在线| 久久精品国产久精国产爱| 久久久天天操| 亚洲私人影院在线观看| 午夜精品久久久| 91久久精品国产91性色| 亚洲视频1区2区| 樱花yy私人影院亚洲| 亚洲人体一区| 国产自产精品| 亚洲天堂偷拍| 欧美承认网站| 亚洲欧美日韩精品久久久久| 久久狠狠久久综合桃花| 亚洲精品国产精品久久清纯直播| 日韩亚洲欧美一区二区三区| 国产日韩欧美a| 亚洲人体影院| 一区二区三区在线免费观看 | 亚洲欧美变态国产另类| 樱花yy私人影院亚洲| 中文日韩在线| 亚洲国产精品久久久久秋霞蜜臀 | 午夜在线a亚洲v天堂网2018| 亚洲国产精品黑人久久久| 在线亚洲一区二区| 在线欧美小视频| 亚洲欧美偷拍卡通变态| 日韩午夜电影av| 久久久视频精品| 久久久久久久久久久一区 | 亚洲欧美国产日韩天堂区| 亚洲第一网站| 欧美在线亚洲综合一区| 亚洲五月婷婷| 欧美人与性动交a欧美精品| 久久久久国产一区二区三区四区 | 性做久久久久久| 亚洲午夜高清视频| 欧美黄色一区二区| 欧美va天堂| 一区二区三区在线免费视频| 午夜精品久久久久久久久久久久久| 在线性视频日韩欧美| 免费人成网站在线观看欧美高清| 久久久精彩视频| 国产噜噜噜噜噜久久久久久久久| 亚洲日本欧美天堂| 亚洲精品乱码久久久久久日本蜜臀 | 乱码第一页成人| 久久er99精品| 国产日韩视频| 性欧美大战久久久久久久久| 亚洲欧洲99久久| 欧美午夜视频在线| 亚洲毛片在线观看| 国产精品99久久久久久久vr| 欧美精品久久久久久久| 亚洲国产美女| 一区二区三区欧美亚洲| 欧美日本国产视频| 99热免费精品| 久久精品国亚洲| 韩国成人福利片在线播放| 亚洲欧美一区二区精品久久久| 亚洲欧美在线视频观看| 国产精品激情偷乱一区二区∴| 一区二区三区国产| 久久av在线看| 在线不卡亚洲| 欧美高清在线视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲一区国产精品| 亚洲欧美一区二区三区久久| 国产精品入口| 久久精品视频在线看| 欧美韩日精品| 亚洲欧美日韩精品| 伊人久久久大香线蕉综合直播| 久久网站免费| 日韩网站在线观看| 欧美亚洲三区| 亚洲电影在线免费观看| 欧美日本不卡视频| 欧美一区二区三区四区在线| 欧美阿v一级看视频| 一区二区成人精品| 国产一区二区三区不卡在线观看| 久久综合给合| 中文亚洲字幕| 欧美成人免费在线观看| 亚洲在线视频| 亚洲国产裸拍裸体视频在线观看乱了 | 国产一区二区三区久久 | 久久精品在线播放| 日韩视频免费看| 狼人天天伊人久久| 亚洲一区亚洲| 亚洲大片免费看| 国产精品久久久久久久app| 久久亚洲综合色| 亚洲一级片在线看| 亚洲高清资源| 久久噜噜亚洲综合| 亚洲免费在线看| 亚洲毛片一区| 亚洲第一视频网站| 国产一区久久| 国产精品影音先锋| 久热综合在线亚洲精品| 亚洲欧美伊人| 夜夜爽www精品| 91久久线看在观草草青青| 久久蜜桃av一区精品变态类天堂| 香蕉av777xxx色综合一区| avtt综合网| 亚洲精品免费看| 在线电影国产精品| 国产日韩欧美中文| 国产农村妇女毛片精品久久麻豆| 欧美日本精品| 欧美日韩精品免费观看视频|