HDU 6140 Hybrid Crystals (玄学背包)

来源:互联网 发布:地图数据研发工程师 编辑:程序博客网 时间:2024/06/05 00:59

先预处理一下,就转化成一个把背包装满的问题。。。时间很玄学。。998ms卡过。要多交几次,大概交三次TLE两次吧。。。orz

#include<bits/stdc++.h>using namespace std;#define maxn 1001int dp[1000001]; int t,n,k;char ch;int arr[maxn];vector<int> vec;int main(){    scanf("%d",&t);    while(t--)    {        vec.clear();        scanf("%d%d",&n,&k);        for(int i=1;i<=n;i++)            scanf("%d",&arr[i]);        int num = 0;int dd=0;        for(int i=1;i<=n;i++)        {            cin>>ch;            if(ch=='L') num +=arr[i];            if(ch=='D') num -= arr[i];            else            {                vec.push_back(arr[i]);                dd+=arr[i];            }        }        k = abs(k-num);        if(dd<k)        {            puts("no");            continue;        }        fill(dp,dp+k+1,-INT_MAX);        dp[0] = 0;        for(int i=0;i<vec.size();i++)        {            for(int j = k;j>=vec[i];j--)            {                dp[j]=max(dp[j],dp[j-vec[i]]+vec[i]);            }        }        if(dp[k]==k)            puts("yes");        else puts("no");    }}
原创粉丝点击