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

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 ,把所有情況對應的健康值算出來,然后再其中取一個最大值即可。(位運算很重要?。?br>

#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上海東華賽區網絡賽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
折中一下 似乎可以接受 對了 請問你有更好的方法嗎?   回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合给合久久狠狠狠97色69| 午夜亚洲视频| 欧美大片免费| 最新国产精品拍自在线播放| 亚洲高清一二三区| 欧美日韩国产在线播放| 亚洲天堂av在线免费观看| 亚洲免费视频成人| 好看的日韩视频| 亚洲国产欧美不卡在线观看| 欧美日韩国产成人精品| 午夜亚洲精品| 久久亚洲影音av资源网| 一区二区三区免费看| 亚洲欧美一区二区精品久久久| 国产一区视频在线看| 欧美国产日本韩| 欧美天堂亚洲电影院在线观看| 亚洲欧美在线磁力| 蜜桃av综合| 亚洲欧美在线观看| 欧美h视频在线| 欧美专区亚洲专区| 欧美高清一区二区| 久久久久网站| 欧美午夜女人视频在线| 久热这里只精品99re8久| 欧美日韩免费观看一区=区三区| 午夜精品久久久久久久| 欧美成人久久| 久久综合久色欧美综合狠狠| 亚洲一级二级在线| 久久久亚洲国产天美传媒修理工| 日韩一级大片| 久久久久久久综合| 欧美在线免费播放| 欧美日韩不卡一区| 欧美不卡一区| 国产亚洲欧美一区| 亚洲深爱激情| 中文在线不卡视频| 欧美成人中文| 欧美二区在线观看| 国语自产精品视频在线看一大j8| 亚洲精品免费在线| 亚洲经典三级| 久久久噜噜噜久久久| 久久精品在线观看| 国产精品私拍pans大尺度在线| 91久久嫩草影院一区二区| 在线成人亚洲| 久久久久一区二区| 久久久久久噜噜噜久久久精品| 国产精品美女在线| 在线视频你懂得一区| 一本色道久久88综合亚洲精品ⅰ| 久久午夜激情| 欧美成人午夜激情视频| 国内精品写真在线观看| 午夜视黄欧洲亚洲| 久久av资源网站| 国产午夜精品全部视频在线播放| 亚洲欧美日产图| 欧美伊人影院| 国内综合精品午夜久久资源| 欧美一级日韩一级| 美女主播视频一区| 亚洲国产福利在线| 欧美va天堂在线| 亚洲欧洲美洲综合色网| 日韩亚洲精品视频| 欧美三区在线视频| 亚洲小视频在线观看| 欧美专区18| 亚洲福利国产| 欧美日韩成人一区二区| 一区二区三区久久网| 欧美一区二区成人6969| 精品1区2区3区4区| 欧美精品一区二区三| 制服丝袜亚洲播放| 久久精品视频亚洲| 亚洲福利视频一区二区| 欧美精品福利视频| 亚洲天堂av在线免费| 久久久噜噜噜久久久| 亚洲黄一区二区三区| 欧美午夜一区二区三区免费大片| 亚洲一区二区3| 免费久久99精品国产| av成人激情| 国产亚洲精品资源在线26u| 麻豆国产精品va在线观看不卡| 日韩一级精品视频在线观看| 久久精品道一区二区三区| 亚洲国产视频一区二区| 欧美日韩天堂| 久久久国产成人精品| 亚洲精选久久| 久久久亚洲高清| av成人免费| 亚洲第一精品夜夜躁人人爽 | 亚洲综合精品自拍| 国产一区二区观看| 欧美日韩视频在线| 久久全国免费视频| 亚洲永久精品大片| 亚洲激情在线观看视频免费| 久久精品人人爽| 亚洲一二三四久久| 亚洲国产欧美在线人成| 国产欧美一区二区白浆黑人| 欧美r片在线| 久久国产精品久久久| 这里只有精品电影| 亚洲精品一区二区三区99| 久久午夜激情| 性欧美videos另类喷潮| 夜夜嗨av一区二区三区网页| 国产午夜精品美女毛片视频| 欧美日韩精品免费观看视频| 久久夜色撩人精品| 欧美一区二区视频在线观看2020| 99这里只有精品| 亚洲激情第一区| 欧美成人高清| 美乳少妇欧美精品| 久久天堂av综合合色| 久久国产精品99久久久久久老狼| 亚洲午夜精品网| 亚洲最快最全在线视频| 亚洲精品孕妇| 亚洲精品在线一区二区| 91久久国产自产拍夜夜嗨| 永久免费精品影视网站| 娇妻被交换粗又大又硬视频欧美| 国产午夜精品一区理论片飘花 | 国产精品专区h在线观看| 国产精品成人v| 国产精品v欧美精品v日本精品动漫| 欧美福利视频在线观看| 欧美电影在线观看| 欧美成人精品在线观看| 欧美黄在线观看| 欧美日韩网址| 国产精品伦一区| 国产精品网曝门| 国产午夜亚洲精品理论片色戒| 国产乱码精品1区2区3区| 国产欧美一区二区三区国产幕精品| 国产精品嫩草99av在线| 国产色综合天天综合网| 国内精品伊人久久久久av一坑| 国内精品写真在线观看| 亚洲成人在线免费| 99国产精品久久久| 亚洲一区三区电影在线观看| 欧美一区=区| 久久天堂精品| 91久久视频| 亚洲在线免费| 老司机精品导航| 欧美日韩国产123区| 国产精品人人做人人爽人人添| 国产亚洲精久久久久久| 在线观看视频一区| 一区二区欧美在线| 久久xxxx| 亚洲国产美女| 亚洲免费影视| 老司机免费视频一区二区| 欧美日韩亚洲系列| 国产日韩欧美综合一区| 亚洲激情电影在线| 亚洲欧美日韩在线观看a三区| 久久久国产一区二区三区| 欧美国产综合视频| 亚洲午夜激情在线| 久久综合中文色婷婷| 欧美色播在线播放| 亚洲第一天堂无码专区| 亚洲一区在线看| 欧美黄色aa电影| 亚洲在线1234| 欧美经典一区二区| 国内揄拍国内精品少妇国语| 99国产精品久久| 久久婷婷麻豆| 亚洲综合精品自拍| 欧美日韩a区| 亚洲盗摄视频| 久久久久久久999精品视频| av成人天堂| 欧美激情小视频| 影视先锋久久| 久久精品30| 亚洲欧美成人网| 欧美日韩国产成人精品| 亚洲国产日韩欧美在线图片| 久久精品国语|