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 eq...
分类:
其他好文 时间:
2014-08-05 11:12:25
阅读次数:
267
题目:http://poj.org/problem?id=3254
因为&运算写成&&--导致调试了快一个小时代的代码没有搞定
关于建图:
1、题目中是1表示可以放牧,0表示不可以放牧,但是建图的时候,可以放牧的位用0表示,不可以放牧的位用1表示。原因如下:
假设可以放牧的位用1表示,不可以放牧的位用0表示,那么假设当前行状态时1010 想要放置1001 ,&运算的结果...
分类:
其他好文 时间:
2014-08-05 11:10:19
阅读次数:
242
#include#includevoid main(){ int max(int x,int y);int n,a[1000],m,i,maxi,k,dp,j,int dp[1000];while(scanf("%d",&n)!=EOF){for(i=0;ia[0]){maxi=a[i];k=i;}...
分类:
其他好文 时间:
2014-08-05 10:58:29
阅读次数:
247
可以发现 当第i-1个比第i个高的时候 比第i-1个高的所有也一定比第i个高
于是可以用到动态规划的思想
令left[i]表示包括i在内比i高的连续序列中最左边一个的编号 right[i]为最右边一个的编号
那么有 当h[left[i]-1]>=h[i]]时 left[i]=left[left[i]-1] 从前往后可以递推出left[i]
同理 当h[right[i]+1]>=h[i]]时 right[i]=right[right[i]+1] 从后往前可递推...
分类:
其他好文 时间:
2014-08-05 09:39:49
阅读次数:
276
题目大意:对n个数组成的序列取数,规定最两边不能取,每次取一个a[i],得到 a[l] * a[i] * a[r] 的分数(a[l]是a[i]左边的数,a[r]是a[i]右边的数),并把这个数从序列中移走,求n-2次取数后的得分和的最小值分析:正着确定状态不好做,不如反着来,设dp[l][r]为向区...
分类:
其他好文 时间:
2014-08-05 03:01:28
阅读次数:
217
题目大意是用1*2的骨牌堆积成4*N的矩形,一共有多少种方法,N不超过10^9。
这题和曾经在庞果网上做过的一道木块砌墙几乎一样。因为骨牌我们可以横着放,竖着放,我们假设以4为列,N为行这样去看,并且在骨牌覆盖的位置上置1,所以一共最多有16种状态。我们在第M行放骨牌的时候,第M+1行的状态也是有可能被改变的,设S(i,j)表示某一行状态为i时,将其铺满后下一样状态为j是否可行,...
分类:
其他好文 时间:
2014-08-05 00:49:48
阅读次数:
240
二维动规是如果只用到本层的和上一层的数据就可以用滚动数组
比如 dp[i,j]=max(dp[i-1,j],dp[i,j-1]);
max的意思就不多说了...
具体例子的话,比较经典的就是最长公共子序列,就是 abcde 和 aecd的最长公共子序列就是acd。
如果不是滚动数组的话就是
for i:=1 to length(st1) do
for j:=1 to length(st2)d...
分类:
其他好文 时间:
2014-08-05 00:48:38
阅读次数:
266
题目:你要去自己买个组装机,现在给你每个零件的类别、名字、价钱、级别,以及你有的钱数,
求能组装成的机器的最大级别(机器的所有零件中的最小级别,即最小值最大)。
分析:分治、dp。看起来很像是dp,不过本题可以利用二分求解(我这里二分套二分了)。
首先,将所有的零件按照级别递减排序,此时装机的总代价递减(比原来多了新的参考零件);...
分类:
其他好文 时间:
2014-08-05 00:43:28
阅读次数:
301
由LIS的nlogn解法 可以得出最后统计数组中数的个数即为LIS的长度 这样就可以状压了#include #include #include #include #include #include #include #include #include #include #include #inclu...
分类:
其他好文 时间:
2014-08-05 00:19:18
阅读次数:
221