description
analysis
-
对于 n = 0 n=0 n=0的点,直接模拟就好了
-
状压 D P DP DP,设 f [ i ] [ j ] [ S ] f[i][j][S] f[i][j][S]表示到第 i i i题、连续 G G GG GG了 j j j题、喝的饮料集合为 S S S的最大答案
-
由于一题可以喝多瓶饮料所以转移需要枚举 S S S的子集 S S SS SS来转移
-
然后转移比较显然但是细节恶心
-
我不会告诉你我一共打了三个DP然后调出来其中一个才切的
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<iostream>
#define MAXN 105
#define MAX 500005
#define ha 19260817
#define db double
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
using namespace std;
db f[MAXN][MAXN][3000],val[3000][3000