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

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>
            国产精品日韩高清| 一区二区三区四区在线| 欧美成人久久| 久久天天躁狠狠躁夜夜爽蜜月 | 欧美综合国产| 欧美一区二区精品| 久久www成人_看片免费不卡| 久久一区免费| 欧美丰满少妇xxxbbb| 欧美激情精品久久久久久黑人| 欧美成人综合网站| 国产精品swag| 狠狠色综合播放一区二区| 亚洲欧洲精品天堂一级| 亚洲一区二区三区色| 久久精品免费观看| 亚洲国产精品久久久久秋霞蜜臀| 久久天堂成人| 亚洲精品一区二区三区99| 亚洲一区视频| 久久国产精品72免费观看| 免费欧美电影| 国产精品久久久一区麻豆最新章节| 国产日韩精品一区二区三区| 亚洲国产精品一区制服丝袜| 亚洲女同精品视频| 欧美成人免费va影院高清| 亚洲精品视频在线观看网站| 午夜在线精品偷拍| 欧美精品在线免费| 韩国v欧美v日本v亚洲v| 99在线精品免费视频九九视| 久久免费黄色| 亚洲一区二区三区午夜| 欧美成人免费网站| 亚洲国产高清自拍| 亚洲欧美欧美一区二区三区| 女同性一区二区三区人了人一 | 欧美日韩视频在线一区二区 | 欧美伦理影院| 国内精品视频一区| 亚洲专区免费| 亚洲人成欧美中文字幕| 久久久久久久波多野高潮日日 | 亚洲精品男同| 久久夜色精品亚洲噜噜国产mv| 99热这里只有成人精品国产| 久久综合色影院| 国产中文一区二区| 久久精品国产欧美激情| 亚洲欧美日韩另类精品一区二区三区 | 欧美日韩视频在线一区二区观看视频 | 欧美视频官网| 一区二区三区欧美激情| 亚洲国产岛国毛片在线| 久久漫画官网| 狠狠色香婷婷久久亚洲精品| 久久久久91| 久久se精品一区二区| 国产视频一区在线| 久久精品一区二区三区中文字幕 | 久久久综合网| 狠狠色丁香久久婷婷综合丁香 | 国产一区日韩二区欧美三区| 午夜视频在线观看一区| 亚洲免费在线播放| 国产欧美一区二区精品仙草咪 | 久久九九国产精品怡红院| 销魂美女一区二区三区视频在线| 国产精品一区二区三区久久| 欧美在线播放一区二区| 性久久久久久久久久久久| 国产日韩综合一区二区性色av| 欧美亚洲免费| 欧美在线视频一区| 在线观看一区| 亚洲国产免费| 好吊色欧美一区二区三区四区| 久久精品中文字幕一区二区三区| 欧美一区二视频| 伊人男人综合视频网| 欧美激情bt| 欧美日韩中文| 久久久亚洲影院你懂的| 免费视频亚洲| 亚洲已满18点击进入久久| 亚洲男人天堂2024| 亚洲电影免费观看高清完整版在线观看| 久久久夜精品| 欧美日韩国产91| 欧美一乱一性一交一视频| 久久久噜噜噜久噜久久 | 先锋影院在线亚洲| 欧美在线高清视频| 亚洲精品欧美精品| 午夜精品在线观看| 亚洲黄色免费网站| 亚洲视频一起| 亚洲高清在线播放| 亚洲影院色无极综合| 亚洲国产精品悠悠久久琪琪| 亚洲午夜在线| 亚洲乱码国产乱码精品精天堂| 亚洲欧美清纯在线制服| 亚洲三级免费电影| 性娇小13――14欧美| 一区二区三区精品视频| 久久九九全国免费精品观看| 在线天堂一区av电影| 久久久青草婷婷精品综合日韩| 亚洲小视频在线观看| 狂野欧美一区| 久久免费视频在线| 国产精品永久免费在线| 亚洲国产天堂久久国产91| 国产亚洲欧美在线| 99v久久综合狠狠综合久久| 一区二区在线观看av| 亚洲午夜性刺激影院| 一区二区激情小说| 免费亚洲网站| 免费观看成人网| 国际精品欧美精品| 亚洲免费一级电影| 校园春色国产精品| 国产精品a级| 日韩手机在线导航| 亚洲精品一区二| 久久一日本道色综合久久| 久久国产黑丝| 国产欧美日本一区二区三区| 在线天堂一区av电影| 亚洲视频高清| 欧美午夜精品| 亚洲在线视频观看| 欧美在线观看一区二区| 国产精品久久久久永久免费观看 | 在线成人黄色| 羞羞答答国产精品www一本| 欧美三级小说| 一区二区三区黄色| 亚洲欧美激情视频| 国产精品久久久久一区| 亚洲一区亚洲| 欧美一区2区视频在线观看| 国产精品五区| 欧美中文在线免费| 蜜臀va亚洲va欧美va天堂| 影音先锋日韩资源| 欧美h视频在线| 亚洲精品久久嫩草网站秘色| 日韩系列欧美系列| 国产精品扒开腿爽爽爽视频 | 99re热这里只有精品免费视频| 99精品视频免费观看| 欧美网站在线观看| 亚洲欧美国产高清va在线播| 久久嫩草精品久久久精品一| 在线看一区二区| 欧美精品国产一区二区| 亚洲一区二区日本| 麻豆国产精品777777在线| 亚洲精品影院| 国产九九精品视频| 免费不卡在线观看av| 亚洲区在线播放| 久久精品国产99国产精品澳门| 亚洲国产精彩中文乱码av在线播放| 欧美激情一区二区| 欧美一级视频| 亚洲肉体裸体xxxx137| 久久riav二区三区| 洋洋av久久久久久久一区| 国产午夜精品一区二区三区欧美| 欧美电影在线观看| 欧美一级视频精品观看| 99精品久久久| 欧美插天视频在线播放| 亚洲欧美韩国| av成人天堂| 在线观看日韩一区| 国产欧美大片| 欧美视频在线观看一区| 久久天天躁狠狠躁夜夜av| 亚洲综合日韩中文字幕v在线| 亚洲国产福利在线| 久久一区二区三区超碰国产精品| 国产精品99久久99久久久二8 | 美女图片一区二区| 亚洲欧美成aⅴ人在线观看| 最新日韩在线| 免费久久99精品国产| 羞羞色国产精品| 亚洲自拍高清| 一本色道久久综合狠狠躁篇的优点 | 一本色道久久综合一区| 在线观看欧美日韩| 国产亚洲欧美一级| 国产亚洲第一区| 国产欧美日韩在线视频|