洛谷T31039 九尾狐吃棉花糖
小伙伴出的题。
一眼看出是状压DP裸题。回忆poj2288 islands and bridges,然后就很好写了。
啪啪啪打了个状压DP出来(晚上寝室写的,其实是记忆化搜索),发现sum总是INF
然后发现:printf函数调用的貌似不是运行solve之后的,而是还未运行solve时的值。
于是分开写就A了。
出题者跑了一秒多,貌似用的二分...反正不怎么看得懂。
果然DP大法吼哇!
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long LL;
using std::max;
using std::min;
const int N = ;
LL INF;
int n; LL f[ << N][N], sum[ << N][N], G[N][N]; void cal(int sta) {
int t[N];
for(int i = ; i < n; i++) {
t[i] = (sta >> i) & ;
}
for(int i = n - ; i >= ; i--) {
printf("%d", t[i]);
}
return;
} LL solve(int i, int j) { if(f[i][j] != INF) {
//printf("solve: ");
//cal(i);
//printf(" %d ans = %lld sum = %lld \n", j, f[i][j], sum[i][j]);
return f[i][j];
} int ct = ;
for(int ii = ; ii < n; ii++) {
ct += (i >> ii) & ;
}
if(ct < ) {
f[i][j] = INF - ;
return INF - ;
} LL ans = INF - , len = INF - ;
int sta = ((~( << j)) & i);
for(int ii = ; ii < n; ii++) {
if(!(G[ii][j] && ((i >> ii) & ))) {
continue;
}
LL t_ans = max(solve(sta, ii), G[ii][j]);
LL t_len = sum[sta][ii] + G[ii][j];
if(t_ans < ans) {
ans = t_ans;
len = t_len;
}
else if(ans == t_ans) {
len = min(len, t_len);
}
}
f[i][j] = ans;
sum[i][j] = len;
//printf("solve: ");
//cal(i);
//printf(" %d ans = %lld sum = %lld \n", j, ans, len);
return ans;
} int main() {
memset(f, 0x7f, sizeof(f));
memset(sum, 0x7f, sizeof(sum));
INF = sum[][]; int m, x, y;
LL R, z;
scanf("%d%d%lld", &n, &m, &R);
for(int i = ; i <= m; i++) {
scanf("%d%d%lld", &x, &y, &z);
x--; y--;
if(x == y || z > R) continue;
if(G[x][y]) z = min(z, G[x][y]);
G[x][y] = G[y][x] = z;
}
for(int i = ; i < n; i++) {
if(G[][i]) {
int sta = | ( << i);
f[sta][i] = G[][i];
sum[sta][i] = G[][i];
}
}
int ed = ( << n) - ;
LL ans = solve(ed, (n - ));
LL len = sum[ed][n - ];
if(ans >= INF - ) {
printf("wuwuwu~");
}
else {
printf("%lld %lld", ans, len);
}
return ;
}
AC代码
洛谷T31039 九尾狐吃棉花糖的更多相关文章
- 洛谷 P1736 创意吃鱼法
题目描述 题目链接:https://www.luogu.org/problemnew/show/P1736 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢( ...
- 洛谷 P1736 创意吃鱼法 Label:dp || 前缀和
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- 洛谷P1736 创意吃鱼法
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- 洛谷P1736 创意吃鱼法 dp
正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...
- 洛谷 P4066 [SHOI2003]吃豆豆 解题报告
P4066 [SHOI2003]吃豆豆 题目描述 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪 ...
- 洛谷 P1736 创意吃鱼法(多维DP)
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- 洛谷 P2069 松鼠吃果子
P2069 松鼠吃果子 题目描述 有N个一种松鼠喜欢吃的果子由下向上串排成一列,并标号1,2,...N.一只松鼠从最下果子开始向上跳,并且第i次跳可以一次跳过i*i*i除以5的余数+1个果子(=i*i ...
- 题解【洛谷P1433】吃奶酪
题面 看到数据范围那么小,一眼状压\(\text{DP}\). 设\(dp[i][s]\)表示从\(i\)出发,走过的点的集合为\(s\)的最小距离. 不难推出转移方程(\(dis(i,j)\)为\( ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- spring后置处理器BeanPostProcessor
BeanPostProcessor的作用是在调用初始化方法的前后添加一些逻辑,这里初始化方法是指在配置文件中配置init-method,或者实现了InitializingBean接口的afterPro ...
- css3特殊图形(气泡)
一.气泡 效果: body{ background: #dd5e9d; height: 100%; } .paopao { position: absolute; width: 200px; heig ...
- JS 将值插入数组中
使用 push 方法 1.var arr = [1,2,3] arr.push(数值) 或者 arr.push({xxx:数值}) 2.输出数组中的最后一个 console.log(arr.[arr. ...
- 插件 DataTable 创建列表 render参数的详解与如何传递本行数据id
1.首先 导入DataTable 的插件 2.定义表结构: HTML: <table> <thead> <tr> <th>id</th> & ...
- jaxp的dom方式操作(查找、添加、修改、删除、遍历节点)
package cn.itcast.jaxptest; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;imp ...
- SQL Server For XML
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- EUV光刻!宇宙最强DDR4内存造出
三星电子宣布开发出业内首款基于第三代10nm级工艺的DRAM内存芯片,将服务于高端应用场景,这距离三星量产1y nm 8Gb DDR4内存芯片仅过去16个月. 第三代10nm级工艺即1z nm(在内存 ...
- BZOJ1014[JSOI2008]火星人——非旋转treap+二分答案+hash
题目描述 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 ...
- HDU1659-GCD-容斥原理
从1-a和1-b种选两个数xy,计算出令gcd(x,y)=k的xy的对数. 对于每一个i∈[1,b]使用solve(i,n)函数解决有几个j∈[1,n]使gcd(x,y)=k.然后累加solve(i, ...
- 为什么Elasticsearch查询变得这么慢了?
参考内容:https://mp.weixin.qq.com/s/RTpBaFpNELQCO6VE0KMfsw