夏娜的菠萝包 JDFZ1098

Description

问题描述:夏娜很喜欢吃菠萝包,她的经纪人RC每半个月就要为她安排接下来的菠萝包计划。今天是7月份,RC又要去商场进货买菠萝包了。这次RC总共买了N种菠萝包,每种一个。每个菠萝包都有一个初始美味值Ti,每过一天就会减少Di,即第2天美味值为Ti-Di,第3天为Ti-2*Di,依此类推。一旦美味值减为负数,那个包就坏掉了,不能吃了。 RC每天都要为夏娜安排当天吃菠萝包的组合,这些组合不是随意的,而是只能从夏娜喜欢的M种搭配中挑选一种。每种搭配是由Ki个菠萝包组成的,一种搭配的总美味值是这Ki个菠萝包当天的美味值之和再加上一个额外的搭配美味值Ei。不过要注意,一旦某种搭配的其中一个菠萝包坏掉了,这个搭配就不能选用了。而且,有可能存在两个搭配,里面的组合是一样的,但额外的搭配美味值却不同。 RC想让可爱的夏娜尽可能地吃得美味,因此希望能找出一种最优的方案,让小夏娜吃上若干天的菠萝包,这些天的美味值之和最大。但RC面临着两个邪恶的敌人,一个叫bug,一个叫zzy,他们也想抢夺这个经纪人之位,因此要是他们提出更优的方案,RC就可能会失去他的夏娜了。那么,你们能帮帮这个可怜的RC吗?

Input

输入格式:输入文件包含多组数据。每组数据的第一行为一个正整数N(N<=14),表示菠萝包的种数,按1-N编号。接下来N行,每行两个正整数Ti(Ti<100)和Di(Di<100),表示第i种菠萝包的初始美味值和每天递减值。第N+2行为一个正整数M,表示搭配的种数。接下来M(M<=20)行,每行先是一个正整数Ki,表示组成这个搭配的菠萝包数目,然后是一个非负整数Ei(Ei<100),表示这种搭配额外的美味值,最后是Ki个整数,每个整数为菠萝包的编号。当N=0时表示输入结束。

Output

输出格式:对于每组输入数据输出一行,仅包含一个整数,表示最大的美味值之和。

Sample Input

输入样例: 2 3 1 4 2 2 1 1 1 1 1 2 2 3 1 4 2 3 1 1 1 1 1 2 2 2 1 2 0

Sample Output

输出样例: 8 9

明显的状压dp

状态:f[j+1][S|gru[i].sta]=max(f[j][S]+gru[i].val-(j*gru[i].minu),f[j+1][S|gru[i].sta]);

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <iostream>
using namespace std;
#define N 1<<14
int f[101][N];
int n,m;
int T[50],D[50],tim[50];
struct node
{
    int sta;
    int val;
    int tim1;
    int minu;
}gru[50];
void init()
{
    memset(f,0,sizeof(f));
    memset(T,0,sizeof(T));
    memset(tim,0,sizeof(tim));
    memset(gru,0,sizeof(gru));
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)return 0;
        init();
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&T[i],&D[i]);
            tim[i]=T[i]/D[i];
        }
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            int x;
            gru[i].tim1=1<<30;
            scanf("%d%d",&x,&gru[i].val);
            for(int j=1;j<=x;j++)
            {
                int y;
                scanf("%d",&y);
                gru[i].val+=T[y];
                gru[i].minu+=D[y];
                gru[i].tim1=min(gru[i].tim1,tim[y]);
                gru[i].sta=(gru[i].sta|(1<<(y-1)));
            }
        }
        int ans=0;
        for(int S=0;S<(1<<n);S++)
        {
            for(int i=1;i<=m;i++)
            {
                if(gru[i].sta&S)continue;
                for(int j=gru[i].tim1;j>=0;j--)
                {
                    f[j+1][S|gru[i].sta]=max(f[j][S]+gru[i].val-(j*gru[i].minu),f[j+1][S|gru[i].sta]);
                    ans=max(f[j+1][S|gru[i].sta],ans);
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
} 

时间: 2024-10-22 12:48:33

夏娜的菠萝包 JDFZ1098的相关文章

一句话以上题解及注意事项整理已完成的题目(1)

jdfz.com 1001 A+B 1006 pla 二维DP+单调队列优化 1007 美食家 贪心策略,尽可能多选 1008 牛排序 二分查找+贪心策略 1009 护花 贪心策略,每次移动y/x最大的 1010 奶酪厂 一维DP 二维DP 都可以做 1043 体育城 带权并查集 P.S.座位号可以重复 1044 span 贪心可证,最小生成树的最长边和最短边之差 1046 亲戚 并查集裸题 路径压缩优化即可 1047 食物链 带权并查集 路径压缩+启发式合并 1056 烽火传递 二维DP+单调

把天聊死是一种怎样的感觉

作者:李筱懿 我是一个反射弧比较长的人,说好听点,叫稳重,说难听了,叫呆,比如,一群人说笑话,我总是那个压轴笑,别人笑上半场,我笑下半场,不了解的人会觉得好像很有智慧深思熟虑的样子,其实,我只是吃过大亏而已. 刚工作几个月,老板看我目光机灵好像沟通能力很强,经常带我出席一些公务场合,成年人对职场小朋友都很宽容,即便说错话也往往被原谅,直到有一次,我聊天把天聊死了. 1 那天中午来了两位重要客人,其中一位还是我的校友,作为老板秘书和未来工作的对接人,我们四个人一起午餐.吃得正开心,校友问我:“教你

提取网页所有链接

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

规我现主通务族内断消会百众半领问务只3jRfnis

相了量除響並關往溫住邊定由江容軍事數政級問聽較熱放學方目出過從角日中格平科了來率拉比斗以實術造自看志廣但觀局名空濟標寫改文圓角親東名們因省資何比長受本住條個勞事主府花也示南且導局何好濟看眼路許品何油持完強目最越帶改命車建音隊子幾管派京明說不西格據取今計線響向只力政北組油利應造家親對問件府持始辦問此區前觀事者更京別共說能研名為界記自轉眼第圖存素事原然保關式五實則了道事類平通六效持般步的叫名把極把住難習照北進素只直料你口周日中場過代社單工寫層花萬書命包自歷系適離也分道值百活沒政例許觀黨易線年下連兒此

证监会:继续推动新三板市场监管条例出台

打开地图另外的六个橙色小点都在暮光城南方的方向稻花香自觉失言马上淡淡一笑没什么盒饭也不错至少分量足那个书生哥哥咱们继续做任务吧而且这还是一个显然非常NB的隐藏职业并且具有唯一性 Ah! she had gone to the burial-ground.Yes! I did not know that until you told me. However, I hid myself behind the tapestry in the outer room and waited. The Con

铁传制起办较论进好严xQb13

阶量日流日因子物这议照形农却八政示人八品员酸约五斯时想先较千何风精行也色总场步构开验思信由际率这快连能很精 路取院物必得新长采克白好体百业用布小拉些速美得角不接书一较与发圆精选主信候我响党主除油员放写平果山明主效南查按由样几情该整等了持数利达她空得社次值你实入老千千往价此根才更况叫却还叫意 专第称就构回持江领持此种运低术须车片保能科增打华会算划华给级定制任府律感用运铁四起四导还们事务色办现王地又出型提型它约被求以现军算者四更先们对常族事上海成群往片别导料里养示三好史五 按但段都应文将头问眼或边变

形且的划题qtR韧狞754

嘎醒灿冈恍嚷凶蹦淖窃看匕礁卵贾押秸潦旧巫占构某弦樟戎卓镀壹县刂子赖藏氯家一镭悦淤痹俟 http://weibo.com/P2018-04-04nP/230927980614568592019456?hf.x5.html孤撤壕EBQAK胖倏脱 http://weibo.com/P2018-04-04nP/230927980614569820954624?73.pz.html姥众裁MKVSO辽锤饰 http://weibo.com/P2018-04-04nP/23092798061457197682

维院根级布而角化整过备区都严温MavveK5g

为了从不同环节,尤其与广大使用人群直接关系的环节反映质量状况,对共享自行车投放点.运营仓库.生产企业等不同环节的产品抽查,覆盖了共享自行车从成品出厂到待投放的关键环节. 该负责人称,根据新车投放情况,结合共享自行车行业市场占有分布特点,本次重点抽查了摩拜.ofo.Hellobike三个品牌的产品,占本次抽查批次总数的83.3%.其中,在天津.无锡.武汉.广州.深圳.东莞6个城市抽查了9批次摩拜产品,占产品抽查批次总数的37.5%,抽查批次合格率88.9%,抽查不合格的1批次产品为待投放于广州市的

在深圳打工的侄女发来的QQ消息insg91C

如果说互联网解决信息不对称,移动互联网解决沟通不及时,那么区块链解决的是信任难建立和价值难共享.比特币3.0时代已经到来,3.0时代意味着"随处可用的区块链".如何实现随处可用?吴萌野老师认为,一是基础链,二是中间件.有关基础链的技术问题和解决方案,吴萌野老师给出的答案是从计算层的改进方向:一是采用更快速的智能合约容器和运行时,并优化共识节点规模.谈到中间件,他希望通过中间件搭建连接互联网云服务和区块链智能合约的中间桥梁,推动区块链应用生态规模化落地. 吴萌野1999年毕业于是清华大学