- 博客(45)
- 收藏
- 关注
原创 UVA714- Copying Books(最大值最小化)
题意:k份书稿分成m份,使得每份的和最小思路:典型最大值最小化问题,使用贪心+二分。贪心的是每次尽量将元素往右边划分,二分查找最小的x满足m个连续的子序列和S(i)都不超过x。因为输出的原因,在划分时就从后往前尽量划分。#include #include #include #include using namespace std;typedef long
2014-07-31 10:30:57 827
原创 HDU4891-The Great Pan
题意:找出一共有多少中不同的问题的理解思路:题目本身比较难读懂,但看明白之后就很简单了。其实可以先将所有字符串连接在一起,形成一个大字符串,然后再对整个字符串进行查找。只要关心两种操作符就可以了。1、{},只要将大括号里面的'|'的数量加上1,然后乘以ans2、$$,将在内部遇到n个连续的空格就把ans乘以n + 1。最后注意ans在运算的过程中超int类型的范围
2014-07-29 20:04:40 888
原创 UVA674- Coin Change
题意:用所给的硬币面值构成所需的面值思路:因为所用硬币数量不限,所以很容易想到完全背包。递推:#include #include #include #include using namespace std;const int MAXN = 10005;int n;int coin[] = {1, 5, 10, 25, 50};long long d
2014-07-28 16:37:21 741
原创 UVA10313- Pay the Price
题意:有关用硬币凑成所需面值的组合数。1、只有N,表示使用个数从1 - N的硬币凑成面值为N的组合数2、N,L1,表示使用个数从1 - L1的硬币凑成面值为N的组合数3、N,L1,L2,表示用个数从L1 - L2的硬币凑成面值为N的组合数思路:这题用到了Ferrers图像的性质,即将整数N拆分成不超过n个数之和的拆分数的方案数与将整数N拆分成若干数但都不大于n的方案数是相同
2014-07-28 15:57:49 822
原创 UVA10558- A Brief Gerrymander
题意:一个棋盘,横竖线都是从1到100标号(竖线从左到右标,横线从下到上标),输入n表示有n个被标记的格子,是给出这个格子的左下角坐标,然后输入m,在输入m个数,表示在这些竖线的地方切开棋盘(其实只切了m-2刀,因为2刀必须是1和100,相当于没有),然后输入A,表示你要在横上上切A刀(其实也只是A-2刀,因为2刀必须在横线的1和100)。那么就可以把棋盘很多个大小不一的方块(矩形),只要这些方块
2014-07-27 16:44:49 644
原创 UVA531- Compromise
题意:找出两个文本的最长公共子序列,输出序列思路:最长公共子序列(LCSL),使用标记数组,递归输出最长公共子序列。#include #include #include #include using namespace std;const int MAXN = 105;char s1[MAXN][MAXN], s2[MAXN][MAXN], s[MAXN]
2014-07-26 18:34:26 741
原创 UVA10599 - Robots(II)(变形的LIS)
题意:一个机器人在n * m的网格里面捡垃圾,机器人只能向右或向下走,求出能捡到的垃圾数量的最大值,有多少条路径可以达到最大值,以及输出其中一条路径。思路:按照题意可以看出,因为机器人只能向右和向下走,所以纵坐标就不重要的,而横坐标是递增的。当将所有拥有垃圾的格子经过计算得到它的一维值(唯一的),得到一组的数组。那就可以转化为求最长上升子序列。但这个LIS的条件是mod(m)要大于前一
2014-07-26 15:21:42 793
原创 UVA662- Fast Food
题意:在一条公路上,有n个酒店,要建造k个供给站(建造在酒店所在的位置),给出酒店的位置,求怎么样建造供给站才能使得每个酒店都能得到服务且所要走的路程最短。思路:在i到j酒店建立一个供给站,要使得路程和最短,要将供给站建立在中间。如果i到j为偶数时,可以建立在中间两个数其中一个地方,如果是奇数时,应该建立在(i + j) / 2的地方。我们可以预处理从i到j酒店的最短路程和dis[i]
2014-07-25 19:22:01 929
原创 关于最长上升子序列的问题(LIS)
//最长上升子序列//O(n * n)int LIS() { int Max = 1; memset(dp, 0, sizeof(dp)); for (int i = 0; i < n; i++) { dp[i] = 1; for (int j = 0; j < i; j++) if (a[i] > a[j])
2014-07-23 11:09:43 706
原创 UVA11258- String Partition
题意:每组数据由一串不超过200个字符的字符串构成,问把它们分成不超过int类型的数,组合起来最大是多少?
2014-07-20 14:50:54 658
原创 UVA590- Always on the run
题意:给定两个数n,k,n个城市,k次航班,然后给出n*(n-1)条航班记录,前(n-1)行代表第一个城市分别到其他城市的航班,如果消费为0,则代表没有航班,例如第一个样例,前两行表第一个城市到第二个城市和打三个城市的所有航班,接下来的(n-1)行,代表第二个城市到第一个城市和第三个城市的,现在要求出从第一个城市出发,经过k次航班,到达第n个城市所需要的最小花费是多少?
2014-07-16 10:56:48 583
原创 UVA825- Walking on the Safe Side
题意:给一张表格,让你从左上端走到右下端的最短路径有多少种。其中有些交叉点不能走。思路:状态转移方程 d[i][j] = d[i][j - 1] + d[i - 1][j], 输入比较坑。。。#include #include #include #include #include using namespace std;const int MAXN = 1005;
2014-07-16 10:32:39 446
原创 UVA10285 - Longest Run on a Snowboard
题意:#include #include #include #include using namespace std;const int MAXN = 105;const int dx[] = {-1, 0, 0, 1};const int dy[] = {0, -1, 1, 0};char name[MAXN];int map[MAXN][MAXN],
2014-07-08 09:39:31 480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人