hdu 3217 Health

来源:互联网 发布:手机辐射软件下载 编辑:程序博客网 时间:2024/04/30 01:53

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3217

本题是一道状态压缩DP,题目意思很简单,就是说有n种药,为了治病可以搭配着吃,每种告诉你各种搭配及每种搭配能起到了治疗功效,当选择某种搭配的时候他的所有子搭配(即搭配的子集)的功效和就是最终效果,求给处的所有搭配的最大最终效果。

代码如下:

#include <iostream>#include <cstdio>using namespace std;const int maxn=1<<17;int dp[17][maxn];int max(int a,int b){return a>b?a:b;}int main(){int n,m,i,j;while(scanf("%d",&n)&&n){scanf("%d",&m);memset(dp,0,sizeof(dp));int s,e;for(int i=0;i<m;i++){            scanf("%d%d",&s,&e);            dp[0][s]=e;        }        for(i=1;i<=n;i++){            for(j=0;j<maxn;j++){                if(j&(1<<(i-1))){                    dp[i][j]=dp[i-1][j]+dp[i-1][j-(1<<(i-1))];                }else {                    dp[i][j]=dp[i-1][j];                }            }        }int ans=-1<<30;        for(i=0; i<(1<<n);i++) {            ans = max(ans, dp[n][i]);        }printf("%d\n",ans);}return 0;}


原创粉丝点击