yzoj 2377 颂芬梭哈 题解】的更多相关文章

题意 Alice 和 Mukyu 最近偶然得到了一本写有一种叫做梭哈的扑克游戏的规则的说明书(名为<C████████nd>,中间部分被涂掉了),据其所述,梭哈是一种使用黑桃.红心.梅花.方片的 A 到 K 共 52 张牌(没有大小王)来进行的扑克牌游戏. 不幸的是,规则说明中有关整个游戏的进行方式的部分被撕掉了,Alice 和 Mukyu 从残存的部分只得知了"手牌上限是 5 张"这一消息,所以他们决定每次直接给两人各发 5 张牌,判定谁的手牌比较大,说明书中关于手牌大小…
题意 类似于涂色问题,环形问题不多说,断环加倍即可,限制条件if判断就行. 解析 代码 #include<bits/stdc++.h> using namespace std; int n,c,p,a[410]; int f[410][410],ans=1<<30; int main(){ scanf("%d %d %d",&n,&c,&p); for(int i=1;i<=n;++i){ scanf("%d",…
题意 如下图所示为一个数字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 请编程计算从顶至底部某处的一条路径,使该路径所经过的数字的总和最大.约定: (1)每一步可沿直线向下或右斜线向下走: (2)1<=三角形行数<=100: (3)三角形中的数字为整数不超过整型,保证结果也不超过整型. (4)要求必须经过第n/2行.第n/2列这个位置. 一道简单的dp题,我们可以发现在n/2行以后n/2列左边的数是不会被用到的,也就是说我们可以分步dp,将n/2行特判即可 #inclu…
[SinGularLaRiTy-1044] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 小水塘(lagoon) 题目描述 忘川沧月的小水塘的水面是一片由以下两种图形组成的图案: <图lagoon-1> 这两种图形都由一个边长为2的正方形和两个半径为1的1/4圆组成,圆心在正方形的两个对角顶点上. 小水塘左上角坐标为(0,0),右下角坐标为(2*n,2*m).水面上每一个顶点坐标为偶数的2*2正方形,都是上面两个图形中的一种.如果我们…
可能是一个 SAM 常用技巧?感觉 SAM 的基础题好多啊.. 题目描述 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀,求: \[ \sum_{1\le i<j\le n}len(T_i)+len(T_j)-2\times lcp(T_i,T_j) \] 其中,\(len(a)\) 表示字符串 \(a\) 的长度,\(lcp(a,b)\) 表示字符串 \(a\) 和字符串 \(b\) 的最长公共前缀. 输入输出格式 输入格式:…
题意:给n个积木,搭成两个高度相同的塔,问最高高度 正解是dp 答案在dp[n][0] 代码 #include<bits/stdc++.h> using namespace std; int f[2][1000050],n,a[51],ans; int main(){ memset(f,-0x3f,sizeof(f)); scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&a[i])…
题意 类似于就是背包. 解析 代码 跟解析有点不一样v[i]价值,w[i]重量,s背包容积,背包转移即可. #include<bits/stdc++.h> using namespace std; const int maxn=1e4+5; int n,s,x,y,tot,ans; int v[maxn],w[maxn],dp[maxn]; int main(){ scanf("%d",&n); for(int i=1;i<=n;++i){ scanf(&qu…
题意 dfs骗了30分,一开始想的距离正解差一点啊,贪心加dp就可以过的水题,真正太蒻了 解析 代码 #include<bits/stdc++.h> using namespace std; struct node{ int x; int y; }a[210]; int m,n,k; int f[210][210]; bool book[210]; long long ans; bool cmp(node a,node b){ return a.y>b.y; } int main(){…
题意 先讲一下一种容易陷入误区错误思路 要使时间最小,就去找相对于每个点的最短曼哈顿距离,然后取最大值,时间就是(maxn+1)/2. 代码 #include<cstring> #include<algorithm> #include<cmath> #include<cstdio> #include<iostream> #define ll long long #define MX 55 using namespace std; int d[MX…
有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间.这个邮递员每次只能带一样东西.求送完这N-1样东西并且最终回到邮局最少需要多少时间. 很容易发现我们要求 \(\sum_{j=1}^n\) dis[1][ j ]+dis[ j ][1],可以想到跑spfa,对于dis[1][ j ]可以一遍spfa解决但是对于 dis[ j ][1]却不好解决,如果跑n遍spfa明显超…