【题解】Puzzle [Uva1399]】的更多相关文章

[题解]Puzzle [Uva1399] 传送门:\(\text{Puzzle [Uva1399]}\) [题目描述] 给定 \(m\) 和 \(n\),表示有 \(m\) 种不同的字符(大写字母\(A,B,C \cdots\)),\(n\) 个禁止串,请构造一个不包含任何禁止串的最长字符串 并将其输出.如果可以无限长或者无解则输出 \(No\),如果存在多解则输出字典序最大的一种. [输入] 第一行一个整数T表示数据组数. 接下来每组数据第一行为两个整数 \(m,n\),接下来 \(n\) 行…
题意:n个数字的串,每取出一个数字的代价为该数字和左右的乘积(1.n不能取),问最小代价 思路:dp[i][j]表示把i~j取到只剩 i.j 的最小代价. 代码: #include<set> #include<map> #include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<algorithm> typedef long lon…
Description The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product of the number on the card taken…
题意:给一个n*m的矩阵,你只能选择一个格子把这个格子的数换成p(也可以一个都不换),问最大子矩阵和最小可能是多少? 思路: 思路就是上面这个思路,这里简单讲一下怎么n^3求最大子矩阵和:枚举两行(或者两列),然后把每一列之和看做一个数字,这样二维就变成了一维,我们可以直接求最大子串和的方法.初始一个ret为0,然后从左往右加,如果ret<0,那么把ret初始化0,负数作为初始值肯定比重新开始小,然后找出ret的最大值就是最大子矩阵和. 代码: #include<cstdio> #inc…
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789810.html特别不喜欢那些随便转载别人的原创文章又不给出链接的所以不准偷偷复制博主的博客噢~~ 一开始以为是八皇后问题,这不就需要状态压缩dp嘛,PAT没想到竟然还会考这个往后看才发现,原来只是判断是否是八皇后问题的一个解而已. 很明显,八皇后的一个解,每条行.列.对角线最多有1个皇后所以for一遍的时候,相应行.列.对角线的个数++,如果有大于1的,…
http://poj.org/problem?id=1651 题目大意:同“乘法游戏”,这里将乘法游戏的题面复制过来. 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌.最后一次移动后,这里只剩下两张牌.你的目标是使得分的和最小. ——————————————————————————————————— 太水了…… (其实是以前做过,所以觉得水……) dp[i][j]表示i-j区间做乘法游戏得…
http://poj.org/problem?id=3678 总觉得这题比例题简单. 设a为x取0的点,a+n为x取1的点. 我们还是定义a到b表示取a必须取b. 那么我们有: 当AND: 1.当c=1:add(a,a+n); add(b,b+n);//我们不能取0的点,所以我们让程序一旦取0必会矛盾,下面类似的同理. 2.当c=0:add(a+n,b); add(b+n,a); 当OR 1.当c=1:add(a,b+n);add(b,a+n); 2.当c=0:add(a+n,a);add(b+…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题目中文是这样的: 伊格内修斯在数学上很差,他遇到了一个难题,所以他别无选择,只能上诉埃迪. 这个问题描述:f(x)= 5 * x ^ 13 + 13 * x ^ 5 + k * a * x,输入一个非正整数k(k <10000),找到最小非负整数a, 使得任意的整数x,65 | f(x)如果不存在那个a,就打印“否”. 输入 输入包含多个测试用例. 每个测试用例由非负整数k组成,样例输入中有…
题面 lcm(x,y)=xy/gcd(x,y) lcm(x1,x2,···,xn)=lcm(lcm(x1,x2,···,xn-1),xn) #include <bits/stdc++.h> using namespace std; long long n,m; ]; long long gcd(long long a,long long b) { if(!b){ return a; } return gcd(b,a%b); } long long lcm(long long a,long lo…
解题思路 其实仔细观察我们可以发现路径一定是一个类似于下图的一个左括号之后中间随便反复曲折,然后右边在来一个右括号. 然后对于两个括号形状的东西其实是可以利用 Hash 来判等特殊处理的. 对于中间的部分直接 DP : \(f_{i,j,k,0/1}\) 表示第 \(i\) 行,第 \(j\) 列,当前扫到了询问路径的第 \(k\) 个位置,并且是否可以向上或者下转移. 然后优先处理一下左括号形,这里可以维护两个 Hash 分别存储正反的 Hash 值进行判等. 接下来就 DP 处理中间曲折的部…