CF #321 (Div. 2) D
不说了,爆内存好几次,后来醒起状态有重复。。。
状压+TSP
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define LL long long
using namespace std;
//#pragma comment(linker, "/STACK:102400000,102400000")
const int MAX=100005; int pre[20][20];
int dish[20]; LL dp[20][1<<20]; template<class T>
inline T IN(T &num){
num = 0;
char c = getchar(), f = 0;
while(c != '-' && (c < '0' || c > '9')) c = getchar();
if(c == '-') f = 1, c = getchar();
while('0' <= c && c <= '9') num = num * 10 + c - '0', c = getchar();
if(f) num = -num;
return num;
} struct Status{
int l,s;
Status(){};
Status(int ll,int ss){l=ll,s=ss;}
}; int main(){
int n,m,k;
int x,y,c; while(scanf("%d%d%d",&n,&m,&k)!=EOF){
queue<Status>que;
memset(pre,0,sizeof(pre));
memset(dp,-1,sizeof(dp));
for(int i=1;i<=n;i++)
IN(dish[i]);
for(int i=1;i<=k;i++){
IN(x),IN(y),IN(c);
pre[x][y]=c;
}
LL ans=0;
for(int i=1;i<=n;i++){
dp[i][1<<i]=dish[i];
ans=max(ans,(LL)dish[i]);
que.push(Status(i,1<<i));
}
Status tmp; int e;
for(int i=2;i<m;i++){
int sz=que.size();
while(sz--){
tmp=que.front();
que.pop();
for(int j=1;j<=n;j++){
if(tmp.s&(1<<j)){
}
else{
k=tmp.l; e=tmp.s|(1<<j);
if(dp[j][e]==-1) que.push(Status(j,e));
dp[j][e]=max(dp[j][e],dp[k][tmp.s]+pre[k][j]+dish[j]);
}
}
}
}
if(m>=2){
while(!que.empty()){
tmp=que.front();
que.pop();
for(int j=1;j<=n;j++){
if(tmp.s&(1<<j)){
}
else{
k=tmp.l; e=tmp.s|(1<<j);
dp[j][e]=max(dp[j][e],dp[k][tmp.s]+pre[k][j]+dish[j]);
ans=max(ans,dp[j][e]);
}
}
}
}
cout<<ans<<endl; }
return 0;
}
CF #321 (Div. 2) D的更多相关文章
- CF #321 (Div. 2) E
用线段树维护哈希,类似于进位制的一个哈希 a[i]*p^i+a[i-1]*p^i-1... 然后,线段树存在某区间的哈希的值,对于更新,则只需提前计算出整段的哈希值即可. 判断是否相等,由于相隔为d, ...
- CF #376 (Div. 2) C. dfs
1.CF #376 (Div. 2) C. Socks dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...
- CF #375 (Div. 2) D. bfs
1.CF #375 (Div. 2) D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...
- CF #374 (Div. 2) D. 贪心,优先队列或set
1.CF #374 (Div. 2) D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- CF #371 (Div. 2) C、map标记
1.CF #371 (Div. 2) C. Sonya and Queries map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组
题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)
转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...
- CF#138 div 1 A. Bracket Sequence
[#138 div 1 A. Bracket Sequence] [原题] A. Bracket Sequence time limit per test 2 seconds memory limit ...
随机推荐
- windows怎么进如debug调试
主要说一下64位Win7使用debug程序的方法 首先你要下载一个DOSBOX程序 这个程序是一个dos模拟器 这个程序的制作目的是运行经典的DOS游戏 -.- 下载地址:http://www.dos ...
- what is success?
什么是成功?这是个老话题了.然而每个人对成功的认识却也不同.记得央视主持人王志说过成功是相对的,每个人都有自己的成功标准.有的人认为有钱.有房.有车.有女人,就是成功.有的人则认为成功是你做了一件你想 ...
- 前端开发之旅- 移动端HTML5实现文件上传
一. 在一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api 然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 in ...
- echarts交叉关系图二
echarts关系图表,此图是坐标关系图,此图用的随机坐标,此图可以拖拽,更方便整理关系, 引入echarts.js就可以实现 代码: var graph={ //这是数据项目中一般都是获取到的 no ...
- 编写高质量的js之恰当选用if和switch
switch结构中存在很多限制,存在这些限制的主要目的是提高多重分支结构的执行效率.因此,如果能够使用switch结构,就不要选择if结构. 无论是使用if结构,还是使用switch结构,应该确保下面 ...
- highcharts 组合chart
/** *制作 复杂的组合型的 charts * *@param [options] 图表的默认配置 *@dependence jQuery.highcharts *@author wch */ fu ...
- unzip 命令巧用举例
1.把文件解压到当前目录下 unzip master.zip 2.如果要把文件解压到指定的目录下,需要用到-d参数. unzip -d /tmp master.zip 3.解压的时候,有时候不想覆盖已 ...
- Linux学习笔记之 Btrfs文件系统简介及使用
Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息.而 ext2/3 却避免了这种被称为”错误扩散”的问题. Btrfs相关介绍: Btrf ...
- dp有哪些种类
dp有哪些种类 一.总结 一句话总结: 二.dp动态规划分类详解 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. * ...
- C库的制作
1.库的概念:库是一种可执行的二进制形式: 2.分类: 1>静态库 ①.在程序编译时会被连接到目标代码中: ②.程序运行时不再需要该静态库: ③.体积较大: 2>动态库/共享库 ①.在程序 ...