永久打开的传送门

\(这次总算没有写砸........\)

\(设f[i][j]为上一次吃的i物品状态为j的最大收益\)

\(那么我们就暴力枚举所有状态i,然后在当前状态找出一个没吃的食物j,再去找一个吃过的食物q\)

\[那么dp[j][i+(1<<(j-1))]=max(dp[j][i+(1<<(j-1))],dp[q][i]+val[j]+vis[q][j])
\]

\(其中val[j]是食物j的收益,vis[q][j]是先吃q再吃j的收益\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[20][1<<20],vis[20][20],val[20],n,m,k;
bool isok(int i)
{
ll ans=0;
while(i)
{
if(i&1) ans++;
i>>=1;
}
if(ans==m) return true;
else return false;
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
cin>>val[i];
f[i][1<<(i-1)]=val[i];
}
for(int i=1;i<=k;i++)
{
ll l,r,w;
cin>>l>>r>>w;
vis[l][r]=w;//先吃l再吃r获得w能量
}
for(int i=0;i<(1<<n);i++)//枚举所有状态
for(int j=1;j<=n;j++)//枚举这一次吃的什么
{
int w=(1<<(j-1));
if(w&i) continue;//已经吃过了
for(int q=1;q<=n;q++)
{
if((1<<(q-1))&i)//吃过
f[j][i+w]=max(f[j][i+w],f[q][i]+val[j]+vis[q][j]);
}
}
ll ans=0;
for(int i=0;i<(1<<n);i++)
if(isok(i))
{
for(int j=1;j<=n;j++)
ans=max(ans,f[j][i]);
}
cout<<ans;
}

D. Kefa and Dishes(状压)的更多相关文章

  1. Codeforces Round #321 (Div. 2) D. Kefa and Dishes 状压dp

    题目链接: 题目 D. Kefa and Dishes time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 W ...

  2. CF580D Kefa and Dishes 状压dp

    When Kefa came to the restaurant and sat at a table, the waiter immediately brought him the menu. Th ...

  3. Codeforces ----- Kefa and Dishes [状压dp]

    题目传送门:580D 题目大意:给你n道菜以及每道菜一个权值,k个条件,即第y道菜在第x道后马上吃有z的附加值,求从中取m道菜的最大权值 看到这道题,我们会想到去枚举,但是很显然这是会超时的,再一看数 ...

  4. codeforces 580D Kefa and Dishes(状压dp)

    题意:给定n个菜,每个菜都有一个价值,给定k个规则,每个规则描述吃菜的顺序:i j w,按照先吃i接着吃j,可以多增加w的价值.问如果吃m个菜,最大价值是多大.其中n<=18 思路:一看n这么小 ...

  5. Codeforces Round #321 (Div. 2) Kefa and Dishes 状压+spfa

    原题链接:http://codeforces.com/contest/580/problem/D 题意: 给你一些一个有向图,求不超过m步的情况下,能获得的最大权值和是多少,点不能重复走. 题解: 令 ...

  6. CF580D Kefa and Dishes 【状压dp】By cellur925

    题目传送门 友情链接:new2zydalao%%%  一篇优秀的状压文章 题目大意:$n$个菜有$k$个规则,如果kefa在吃完第$xi$个菜之后吃了第$yi$个菜(保证$xi$.$yi$不相等), ...

  7. Codeforces Round #321 (Div. 2) D. Kefa and Dishes(状压dp)

    http://codeforces.com/contest/580/problem/D 题意: 有个人去餐厅吃饭,现在有n个菜,但是他只需要m个菜,每个菜只吃一份,每份菜都有一个欢乐值.除此之外,还有 ...

  8. codeforces 580D:Kefa and Dishes

    Description When Kefa came to the restaurant and sat at a table, the waiter immediately brought him ...

  9. 【62测试】【状压dp】【dfs序】【线段树】

    第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标 ...

随机推荐

  1. 获取SVG中g标签的宽度高度及位置坐标

    1. 问题的出现 对于普通的HTML元素,有很多获得其宽度width.高度height.距左left.距顶top等属性的方法: 类似offsetWidth,clientWidth,width之类的,通 ...

  2. NK16

    C 小石的海岛之旅 链接:https://ac.nowcoder.com/acm/contest/949/C来源:牛客网 暑假到了,小石和小雨到海岛上玩. 从水平方向看海岛可以看成 nnn个小块,每一 ...

  3. 谈谈MySQL的索引

    目录 索引 前言 是什么 B树 B+树 B树和B+树结构上异同 有什么用 怎么用 索引 前言 总所周知,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快.而支撑这一快速的背后就 ...

  4. 常见web漏洞整理之进击吧xss!!!

    XSS在线测试环境: http://xss-quiz.int21h.jp/ https://brutelogic.com.br/xss.php 这两个站对xss的理解很有帮助!!! 参考链接: htt ...

  5. react: typescript system params optimize

    1.system-params-service import paramCache from "../common/param-cache" import RequestPromi ...

  6. python 利用numpy同时打乱列表的顺序,同时打乱数据和标签的顺序

    可用于网络训练打乱训练数据个标签,不改变对应关系 方法一: np.random.shuffle (无返回值,直接打乱原列表) state = np.random.get_state() np.rand ...

  7. TokenMismatchException Laravel

    随便写写:很久没写了,今天闲的. 1.错误原因:出现这个错误肯定是因为你在Laravel开启了csrf防御,但是你post提交过去的字段中没有生成_token. 2.如果你提交的字段中带有了_toke ...

  8. tp5命名空间补充

    1.非限定名称访问方式: 直接访问当前的空间和元素 2.限定名称命名空间: 路径\方法();  相当于相对路径 以当前的命名空间为起点,去找路径上的方法 3.完全限定名称访问方式:\路径\方法();  ...

  9. hash算法解决冲突的方案

    1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key) = (f(key)+di) MOD m ...

  10. MAC攻击及缺陷

    MAC攻击及缺陷 MAC有好几种实现方式 对MAC的攻击 重放攻击 重放攻击的防护 密钥推测攻击 MAC算法的缺陷 第三方证明 防止否认 前面我们在讲HMAC的时候简单讲过了什么是MAC消息认证码. ...