状压dp Survival

来源:互联网 发布:许晴 王雪冰 知乎 编辑:程序博客网 时间:2024/05/29 02:59

题目地址

题目大意:这是关于拳王97游戏的,因为玩过,所以对于题目的理解很顺利!大意就是100HP的初始状态要打败n个人,给出打败每个人要消耗的HP,打败后返还的HP,最后一个BOSS只给出要消耗 的HP,问游戏能否过关

思路:看到玩过的游戏就是亲切啊!!然后也不难,自己做的,然而可能太激动了??WA了三次,不是HP不能过百忽视了,就是字母搞乱了了。。。索性不难,代码也短,终于A了

代码:

#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<queue>#include<stack>#include<map>#define inf 0x3f3f3f3fusing namespace std;int N,M,dp[1<<21],a[25],b[25];int main(){    int i,j,k,l;    while(~scanf("%d",&N))    {        N--;        memset(dp,-inf,sizeof(dp));        dp[0]=100;        for(i=0;i<N;i++)        scanf("%d%d",&a[i],&b[i]);        scanf("%d",&M);        l=1<<N;        for(i=0;i<l;i++)            {                for(j=0;j<N;j++)                {                    k=(i|(1<<j))-(1<<j);                    dp[(1<<j|i)]=max(dp[(1<<j|i)],dp[k]<a[j]?(-inf):(dp[k]-a[j]+b[j]));                    if(dp[(1<<j|i)]>100) dp[1<<j|i]=100;                }            }            if(dp[l-1]>=M) printf("clear!!!\n");            else printf("try again\n");    }}

原创粉丝点击