HDU6082-度度熊与邪恶大魔王

来源:互联网 发布:c罗健身 知乎 编辑:程序博客网 时间:2024/04/29 11:18

题解:用完全背包预处理一下防御力为0-10生命为0-1000的最优情况然后就是直接加上去判断这个防御的时候有没有办法杀掉即可

#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;typedef long long int ll;const int inf = 0x3f3f3f3f;const int mx = 1e3+5;int dp[11][mx];int a[mx*100],b[mx*100];int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF){        for(int i = 1; i <= n; i++)            scanf("%d%d",&a[i],&b[i]);        memset(dp,inf,sizeof(dp));        for(int i = 0; i <= 10; i++)            dp[i][0] = 0;        for(int i = 1; i <= m; i++){            int w,v;            scanf("%d%d",&v,&w);            for(int j = 0; j <= 10; j++){                int c = w-j;                if(c<=0)                    continue;                for(int k = 1; k < c; k++)                    dp[j][k] = min(dp[j][k],v);                for(int k = c; k <= 1000; k++)                    dp[j][k] = min(dp[j][k],dp[j][k-c]+v);            }        }        ll ans = 0;        for(int i = 1; i <= n; i++){            if(ans==-1)                continue;            if(dp[b[i]][a[i]]==inf)                ans = -1;            else                ans += dp[b[i]][a[i]];        }        printf("%I64d\n",ans);    }    return 0;}
原创粉丝点击