sicily 1146 采药还是用这题来说吧,对01背包的分析看我之前那篇就好了http://www.cnblogs.com/dominjune/p/4383762.html这里主要是想改进一下二维数组的做法,用一维数组来实现01背包,也叫做滚动数组!先借用某位大牛的一句话:“01背包在二维数组上操...
分类:
其他好文 时间:
2015-04-08 12:47:24
阅读次数:
137
题意:n头牛和m个barn,每头牛有自己喜欢的p个barn(1 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 12 using namespac...
分类:
编程语言 时间:
2015-04-06 14:03:37
阅读次数:
227
第一问是裸DP。。。。第二问还是裸DP,注意一种特殊情况(我忘了是什么特殊情况了QAQQQ)滚动数组可以压掉一维,而且 ^ (xor)比 ! (not)慢。。。 1 /************************************************************** 2 ....
分类:
其他好文 时间:
2015-03-17 21:40:17
阅读次数:
165
poj3624 01背包 dp+滚动数组Charm BraceletTime Limit:1000MSMemory Limit:65536KTotal Submissions:25458Accepted:11455DescriptionBessie has gone to the mall's je...
分类:
编程语言 时间:
2015-03-15 23:40:32
阅读次数:
202
题意: 输入一个n和长度为n的字符串,求最少需要增加多少个字符,使之成为一个回文(从左到右读和从右到左读是一样的) (其实就是括号配对的变形)知识点: 滚动数组内存优化。就像dp[5005][5005] ,占用的内存太大 ,无法编译,利用滚动数组就能很好的解决这个问题,简单来说就是dp[3][5.....
分类:
编程语言 时间:
2015-03-14 19:53:43
阅读次数:
207
一道dp题目。
注释里是第一次打的代码,用了二维来记录状态。
后来看了题解,就把time 一维 用来 做滚动数组。 然后把20%NO记做1。一张卡 记做5。这样只用一维,比较简单。
按要求写出状态方程。
加速的时候time[cur][k]=min(time[cur][k],time[cur^1][k+5]+b[j]);
不加速的时候 time[cur][k]=min(time[cur][k],time[cur^1][k-1]+a[j]);
注意,如果两张卡,而且有80%的NO的时候 ...
分类:
其他好文 时间:
2015-03-08 09:19:34
阅读次数:
163
题目大意:在一条直线上有n(n
a[i]表示第i个宝藏的位置,b[i]表示消失的时间。
首先注意到对于任意区间(i,j),拿完所有宝藏之后必然在i或j两者之一。所以用d[i][j][0]表示拿完第i个到第j个之间的所有宝藏,且最后位于i,用d[i][j][1]表示拿完第i个到第j个之间的所有宝藏且最后位于j。
程序用滚动数组优化内存消耗,递推是按照区间的宽度递增的顺序,所以也是按照这...
分类:
其他好文 时间:
2015-02-28 01:35:19
阅读次数:
196
题目大意:有M(1
用d[i][j]表示当前买了列表的前i个物品并且走完了街道的前j个摊子的最小花费,那么分两种情况,如果第j个摊子卖的和在列表上第i个商品相同,那么可能从d[i-1][j-1]推来或d[i][j-1],即第j个摊子买或不买,若第j个摊子卖的不是列表上的第i个商品,那么就直接由d[i][j-1]推来。
程序中用滚动数组从而在空间上压缩了一维状态。
状态转移方程...
分类:
其他好文 时间:
2015-02-27 10:13:03
阅读次数:
176
点击打开链接
C. Sequence
time limit per test
1 second
memory limit per test
64 megabytes
input
standard input
output
standard output
Little Petya likes to p...
分类:
编程语言 时间:
2015-02-05 13:44:14
阅读次数:
267
/*
最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度
*/
# include
# include
# include
# include
using namespace std;
int dp[2][5010];///滚动数组
int main()
{
char a[5010];
char b[5010];
int i,j,k,len;...
分类:
编程语言 时间:
2015-02-02 16:01:38
阅读次数:
168