计蒜客 30994 - 2018ICPC南京网络预赛 - E题 - AC Challenge - 状压DP

题解参考IGVA大佬:https://blog.csdn.net/LSD20164388/article/details/82313223

题目链接:https://nanti.jisuanke.com/t/30994

题意:有n个问题编号为1~n,每个问题给出ai,bi,si,以及pi1,pi2,pi3...pij...pisi,1<=j<=si,分别代表第t分钟解决这个问题可以得到t×ai​+bi​的分数,si代表课i有si门前导前导分别为pi1...pisi,只有前导问题全部解决当前问题才能解决;现在每一分钟可以解决1个问题,得到相应的价值(价值可能为负),可以在任意时间放弃答题,问最大得到多少分。

解析:注意n的范围是0

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
const int mo=1e9+7;
const int maxn=1<<20;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int n,m,k,T;
ll dp[maxn],ans,tmp,sum;
ll a[25],c[25],b[25];
ll fcount(int x)//计算x的二进制里有几个1
{
 ll s=0;
 while(x){
  s++;
  x&=(x-1);
 }
    return s;
}
int main() {
     int T;
     while(scanf("%d",&n)!=EOF)
     {
         ans=0;sum=0;
         for(int i=0;i

 

 

 

你可能感兴趣的:(动态规划)