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

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>
            久久伊伊香蕉| 国产欧美精品在线播放| 国产亚洲一区二区三区在线播放| 亚洲一区二区欧美| 亚洲欧美成人网| 国产精品国产a| 欧美在线精品免播放器视频| 性做久久久久久久久| 黄色小说综合网站| 亚洲国产精品传媒在线观看 | 亚洲综合日韩在线| 亚洲欧美日韩中文播放| 樱桃视频在线观看一区| 亚洲高清三级视频| 欧美色精品在线视频| 欧美在线网站| 免费美女久久99| 在线一区二区视频| 午夜一区二区三视频在线观看 | 国产精品免费一区二区三区观看| 欧美一区国产一区| 欧美sm视频| 羞羞色国产精品| 男女精品网站| 国产亚洲亚洲| 亚洲天堂男人| 久久九九国产| 亚洲一区二区三区高清不卡| 欧美在线观看一区二区三区| 亚洲精选中文字幕| 久久国产福利| 亚洲欧美久久久久一区二区三区| 久久精品亚洲| 欧美一级久久久| 欧美噜噜久久久xxx| 久久偷窥视频| 国产精品一区在线观看| 亚洲激情欧美| 影视先锋久久| 久久精品国产欧美亚洲人人爽| 一区二区高清视频在线观看| 久久久久**毛片大全| 午夜伦理片一区| 欧美久久99| 亚洲二区精品| 在线欧美三区| 久久福利电影| 久久黄色网页| 国产精品欧美日韩一区二区| 亚洲精选国产| 日韩视频在线一区二区| 久久久久免费视频| 久久综合久久久| 国产一区二区三区电影在线观看| 亚洲视频碰碰| 亚洲丝袜av一区| 欧美女激情福利| 亚洲国产一区二区三区青草影视| 亚洲第一页在线| 久久免费视频观看| 男男成人高潮片免费网站| 国内揄拍国内精品久久| 欧美亚洲一区二区在线| 久久国产一区| 国产一区二区中文字幕免费看| 亚洲午夜小视频| 午夜日韩在线| 国产一区 二区 三区一级| 性久久久久久久| 久久久久看片| 激情欧美一区| 欧美成va人片在线观看| 亚洲欧洲日韩在线| 亚洲午夜伦理| 国产欧美日韩高清| 欧美综合国产| 欧美国产成人精品| 日韩视频在线观看免费| 欧美日韩一区在线观看| 亚洲欧美激情视频在线观看一区二区三区 | 欧美激情精品久久久六区热门| 欧美国产日韩亚洲一区| 亚洲九九爱视频| 欧美日韩一区二区在线| 亚洲欧美日韩国产成人| 久久综合导航| 99视频一区| 国产精品网曝门| 狼人天天伊人久久| 亚洲片区在线| 国内精品国语自产拍在线观看| 久久精品国产免费看久久精品| 亚洲电影av| 一区二区三区日韩欧美| 国产精品久久一卡二卡| 久久超碰97人人做人人爱| 欧美国产在线电影| 亚洲欧美国产日韩中文字幕| 国内精品亚洲| 欧美日韩一区二区三区四区在线观看| 在线亚洲免费| 欧美成人免费在线观看| 亚洲一区在线播放| 一区二区三区在线免费播放| 欧美1区2区| 欧美一区二区在线视频| 亚洲欧洲免费视频| 久久久久网站| 亚洲欧美日韩中文视频| 亚洲日本理论电影| 国产午夜亚洲精品羞羞网站 | 美女精品自拍一二三四| 亚洲视频图片小说| 亚洲人成网站色ww在线| 久久免费视频这里只有精品| 亚洲一二三级电影| 亚洲人成人99网站| 国内伊人久久久久久网站视频| 欧美日韩亚洲一区三区| 你懂的一区二区| 久久本道综合色狠狠五月| 亚洲自拍偷拍福利| 亚洲免费观看视频| 亚洲电影一级黄| 毛片一区二区| 久久精品一区二区三区不卡牛牛| 亚洲午夜精品网| 一区二区三区久久精品| 亚洲黄色av| 亚洲第一综合天堂另类专| 国产日韩欧美高清免费| 国产精品狠色婷| 欧美性生交xxxxx久久久| 欧美久久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ| 久久久久久综合网天天| 久久久精彩视频| 久久久久国产一区二区三区四区 | 亚洲视频在线观看| 在线视频免费在线观看一区二区| 亚洲精品在线观看免费| 亚洲精品社区| 日韩一级不卡| 中文亚洲字幕| 亚洲欧美在线网| 欧美一级理论性理论a| 欧美一区二区三区视频在线| 新狼窝色av性久久久久久| 久久成人精品视频| 久久久久久久久久久一区| 久久婷婷综合激情| 免费不卡亚洲欧美| 欧美激情aⅴ一区二区三区| 欧美精品1区| 国产精品国产一区二区| 国产精品亚洲综合色区韩国| 国产亚洲成av人在线观看导航| 国产综合精品| 亚洲大胆人体视频| 99re66热这里只有精品4| 亚洲欧美第一页| 久久精品国产亚洲一区二区| 久久久精品日韩| 免费国产自线拍一欧美视频| 国产精品扒开腿做爽爽爽软件| 女人香蕉久久**毛片精品| 国产精品亚洲不卡a| 亚洲精品国精品久久99热| 激情欧美日韩| 久久国产精品久久久久久| 亚洲午夜精品久久久久久app| 久久精品三级| 国产欧美日韩不卡| 欧美α欧美αv大片| 国产主播喷水一区二区| 亚洲欧美日韩天堂| 久久久久久久久综合| 久久天天狠狠| 亚洲午夜激情在线| 亚洲中无吗在线| 欧美99久久| 亚洲视频在线免费观看| 久久激情视频| 欧美丝袜一区二区| 在线观看一区| 欧美一区二区在线免费观看| 欧美国产欧美综合 | 久久综合中文字幕| 亚洲日本国产| 久久精品成人| 国产精品入口尤物| 亚洲精选在线| 麻豆av一区二区三区| 亚洲一本视频| 欧美另类亚洲| 亚洲国产一区二区三区a毛片 | 午夜亚洲福利在线老司机| 亚洲激情第一区| 久久亚洲影院| 国内欧美视频一区二区|