- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 uva--437The Tower of Babylon+dp
题意: 给定一些立方体,对于两个立方体,只有其中一个底面两个边都严格小于另一个才可以放在其上面。求可以得到的最大高度。 思路: 一个立方体可以转成6个底面不同的具有不同权值(高度)的矩形,然后就是这些矩形的嵌套问题了。以前是将这个问题转成了DAG图上的最长路做的;这一次直接将这些矩形按照底面积由小到大的排序,然后问题就变成求最长上升子序列了。 代码如下:
2014-12-31 13:33:31 765
原创 csuoj--1347Last Digit+数学问题
题意: 定义一个函数f(n, k) = 1k + 2k + 3k +...+ nk,输入n,k求f(n,k)的最后一位数字。 思路: 本来相用快速幂做的,后面想了一下因为它只关心最后一位数字,所以其实该函数是一个周期为10的周期函数(我们只关心n的最后一位数字);然后对于0--9的幂又是有周期的(自己稍微在纸上写一下就知道了),所以可以利用周期性解决了:对于每一次输入,我们先计
2014-12-26 23:39:26 620
原创 uva--10285Longest Run on a Snowboard+dp
经典的滑雪问题。 代码如下: #include #include #include using namespace std; int m[110][110],d[110][110],r,c; int dx[]={1,-1,0,0},dy[]={0,0,1,-1}; int dp(int i,int j) { if(d[i][j]>0) return d[i]
2014-12-25 23:05:53 556
原创 uva--10464Homer Simpson +dp
背包问题的变种。保证费时尽量多的情况下,数目尽可能多。但是不能反过来进行。 代码如下: #include #include #include using namespace std; int main() { int w[5],v; while(scanf("%d%d%d",&w[0],&w[1],&v)!=EOF) { int dp1
2014-12-25 22:12:00 419
原创 uva--531Compromise+dp
其实就是一个最长公共子序列的问题,不过要打印路径。对于路径打印,可以采取0-1背包问题的方法,第一可以利用一个二维数组记录每个状态的指向最后再由最后一个状态 回推,第二可以直接由最后一个状态结合前面的状态转移进行路径打印;下面的代码采用了第二种方法。 代码如下: #include #include #include using namespace std; int main
2014-12-24 23:25:21 634
原创 uva--10130SuperSale +dp
0-1背包问题。其实对于每个人都是一次0-1背包问题,但是我们可以利用背包问题子问题的性质, 一次处理出所有重量下的最大价值。 代码如下: #include #include #include using namespace std; int main() { int t; scanf("%d",&t); while(t--) {
2014-12-24 14:17:12 587
原创 uva--624Word Amalgamation+dp
其实就是0 1背包问题,不过还要输出路径。对于路径输出,我们可以记录在装容量为v的背包时,物品i有没有使用。然后最后从最大容量和最大物品编号往回推即可。 代码如下: #include #include #include using namespace std; int dp[10010],g[50][10100]; int main() { int V; w
2014-12-19 12:36:27 586
原创 uva--562Dividing coins +dp
题意: 给定一堆硬币,然后将他们分成两部分,使得两部分的差值最小;输出这个最小的差值。 思路: 想了好久都没想到一个合适的状态转移方程。后面看了别人的题解后,才知道可以转成背包问题求解。 我们将所有的硬币和的一半作为背包容量,然后将硬币的代价看成其本身的面值。然后背包中能装的最大容量 就是其中一个人分得硬币数。 代码如下: #include #inclu
2014-12-17 22:44:51 678
原创 uva--147Dollars +dp
背包类统计最优解个数问题 代码如下: #include #include #include using namespace std; long long sum[50000]; int main() { double d; int w[]={0,5,10,20,50,100,200,500,1000,2000,5000,10000},i,j; me
2014-12-17 14:07:48 706
原创 java面向对象学习(3)
一.Java7增强的包装类 为了解决Java中8中基本数据类型不能当成Object 类型变量使用的问题,java提供了包装类,为8中基本数据类型分别定义了相应的引用类型。 java1.5以后JDK提供了自动装箱和自动拆箱的功能,所以基本类型和包装类型可以直接装换。包装类可以实现基本类型和字符串类型的转换: 1.利用包装类的parseXxx(String s) 静态方法。
2014-12-15 11:01:38 729
原创 uva--10066The Twin Towers +dp
其实就是求两个序列的最长公共子序列 代码如下: #include #include #include using namespace std; int main() { int n1,n2,Case=0; while(scanf("%d%d",&n1,&n2)&&n1) { int a[110],b[110]; int dp
2014-12-15 10:28:50 617
原创 uva--10131Is Bigger Smarter? +dp
题意: 有人说大象越重就越聪明,为了推翻的它的结论,给你一组大象的体重和智商的数组,你需要找出一组最长的随着体重增加智商下降的序列。 思路: 按照体重排一下序,然后就变成求一个智商最长下降子序列的问题了。 代码如下: #include #include #include #include using namespace std; typedef struct {
2014-12-13 23:46:52 454
原创 java面向对象学习笔记(2)
一.构造器 1.构造器最大的用处就是在创建对象时执行初始化,每个java类必须包含一个或一个以上的构造器。一般系统会提供一个无参的构造器,但是如果我们自己定义了一个构造器后它就不会再起作用了。如果我们为一个类编写了有参构造器,那么最好还是为该类提供一个无参的构造器。 2.构造器的重载 同一个类中可以包含有多个构造器,多个构造器的形参列表不同,即被称为构造器的重载。系统
2014-12-05 15:08:09 691
原创 鸟哥的私房菜--第十一章:认识与学习bash
一.Bash Shell 的操作环境 1.路径和命令查找顺序 如果我们输入一个命令,并且再linux下有多个与其同名的命令,那么会执行哪一个命令?下面就是一些命令执行顺序的规则。 1).以相对/绝对路径执行命令,例如:“/bin/ls”或“./ls” 2).由alias找到该命令来执行 3).由bash内置的(bulitin)命令来
2014-12-04 17:37:58 755
原创 java程序--控制台五子棋
控制台五子棋,具体思路见代码注释。 代码如下: package test; import java.io.IOException; import java.util.Scanner; //控制台简单五子棋 public class GoBang { //二维数组作为棋盘 private static char[][] board=new char[16][16]; //已下
2014-12-02 19:04:47 3559
原创 uva--10405Longest Common Subsequence+dp
经典的最长公共子序列问题。 要注意的是题目中的输入会包含空格的情况,所以要用gets实现输入。 代码如下: #include #include #include using namespace std; int dp[1100][1100]; int main() { char str1[1100],str2[1100]; int i,j; whi
2014-12-02 18:58:09 679
原创 uva--103Stacking Boxes +dp
题意: 其实就是把矩形嵌套扩大到了n维,但是规定这个n维的几何体是可以任意扭曲的。 思路: 就是按照矩形嵌套问题的思路,不过判定是否可以嵌套的时候,我们直接都排一下序就判断了(因为是可以任意扭曲的)。还有就是需要打印出整个序列,这里可以借用小白书上的思路,递归进行打印。 代码如下: #include #include #include #include us
2014-12-01 23:40:09 950
原创 uva--111History Grading +dp
题意: 其实就是求两个序列的最长公共子序列。 思路: 这个题目的输入是很坑爹的,如果把输入理解清楚后,这个题目就不难了。题目的输入表示的是该位置上的数放在哪个位置上,比如说输入是1,3,2,4其对应的序列应该是1,3,2,4; 下面给出2份代码,一份是经典的解法,一份是今天我写的把问题转成DAG图上的最长路求解的代码。 代码如下: #include #in
2014-12-01 23:26:50 705
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人