ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge (状压dp)

https://nanti.jisuanke.com/t/30994

题意:

有n道题,每道题可以得到t*a+b,有些题必须要在一些题做出后才能做,问最高得多少分

思路;

最多20道题,那么就可以用状压dp写。dp[i]表示状态为i时的最大值。

代码:

#include
using namespace std;
#define ll long long
const int maxn=2e7+10;
const int inf=0x3f3f3f3f;
ll dp[1<<22];
ll a[25],b[25];
int mb[25];
int main()
{
    int n;
    scanf("%d",&n);
    memset(dp,-inf,sizeof(dp));
    int x;
    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld",&a[i],&b[i]);
        int k;
        mb[i]=0;
        scanf("%d",&k);
        for(int j=1;j<=k;j++)
            scanf("%d",&x),mb[i]|=(1<<(x-1));
    }
    ll ans=0;
    dp[0]=0;
    for(int i=1;i<=(1<

 

你可能感兴趣的:(状压dp)