![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
tanhaiyuan
这个作者很懒,什么都没留下…
展开
-
poj 3624Charm Bracelet(简单01背包)
这是一道水的不能再水的题了,不过,不用空间优化的话,会超内存的……Charm BraceletTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 10038原创 2011-08-20 11:26:24 · 518 阅读 · 0 评论 -
1.3.3 Calf Flac(求最长回文)
这道题卡了三天啊……暴力超时, 后缀树组咱不会, 于是我上NOCOW看解题报告, 发现一个所谓的DP //dp[i]代表以sr[i]结尾的最长回文的长度; if( str[i]==str[i-1-dp[i-1]]) dp[i]=dp[i-1]+2;// else if( str[i]==str[i-1]) dp[i]=2; else原创 2011-12-23 15:52:02 · 1149 阅读 · 0 评论 -
hdoj 2046 骨牌铺方格(递推)
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.思路: 两种情况: 情况 1: 在长方形方格末尾竖着放一个牌, 就转化为2*(n-1)的问题; 情况2 : 在长方形方格末尾横着放两个牌,( 或则在放两张竖着放的牌, 但是由于情况1中包含这种情况, 因此不再计算), 就转化为2*(n-1)的问题;原创 2011-12-25 17:30:53 · 3301 阅读 · 0 评论 -
hdu 2577 How to Type(简单DP)
思路: 定义二维数组dp[10000][2]保存状态, dp[i][0]表示直接输入为小写字母, dp[i][1]表示直接输入为大写字母;状态转移方程:if( str[i]<'a' )//为大写字母 { //dp[i][0]+1+1 表示先按shift再输入, dp[i][1]+1+1表示先按caps lock 再输入原创 2011-12-29 20:49:58 · 663 阅读 · 0 评论 -
poj2192 hdu1501 Zipper
dp[i][j]表示第一个字符串前i个与第二个字符串前j个字符能否组成第三个字符串前i+j个; #include#include#include using namespace std;int main(){ int T; cin>>T; char str1[205], str2[205], str3[505]; int len原创 2012-05-20 21:11:05 · 762 阅读 · 0 评论 -
hdu Employment Planning(dp 通过DFS写DP)
题意很简单:先用DFS写出来, TL了……#includeusing namespace std;int month;int hcost, sala, fcost;int total, ans;int num[13];int minnum, maxnum;void DFS(int h, int th){ if(th > month) { if(ans>t原创 2012-06-14 21:01:58 · 659 阅读 · 0 评论 -
poj 3221 Washing Clothes(分组的0 1背包)
题意: 两个人洗衣服, 每种颜色的衣服有多件, 要求两人只能同时洗相同颜色的衣服, 求洗衣服的最短时间;这道题虽然简单, 但是是很好的一道题,需要多思考一步 分组的0 1背包思路:因为只能同时洗相同颜色的衣服, 因此将不同颜色看为不同的组, 分别求出来每组的最短时间, 其和即为所求;每组最短时间其实就是0 1背包;无语的是, 我在结构体中多加了一个够着函数, 结果一直超时……去掉原创 2012-07-21 20:59:07 · 691 阅读 · 0 评论 -
hdu 1231 最大连续子序列和( DP )
好久都没写过DP了, 今天写这题时, 竟然状态转移方程都搞错了,本来应该是对DP[i-1]判断其是否小于0来得到DP[i]的,但我却对a[i]做了判断……而且,需要注意的是这道题用cin,cout会TL的……#include#includestruct Record{ int start; int end;}record[10001];int main(){ int n, i原创 2011-11-01 00:55:14 · 725 阅读 · 0 评论 -
poj 1742Coins(混合背包)
水题……#include#includeint n, m;int value[101], num[101];int dp[100001];void zero_p(int i){ int j; for(j=m; j>=value[i]; j--) dp[j]+=dp[j-value[i]];}void duo_p(int i){ int j, k; for(k=1原创 2011-08-27 23:55:51 · 551 阅读 · 0 评论 -
ural 1297Palindrome(求最长回文)
这个数据比较弱, 暴力就可以过……还可以DP, 后缀树组……暴力就不说了……Manacher算法:看连接http://blog.csdn.net/tanhaiyuan/article/details/7091019DP:后缀树,现在还不会啊…… 暴力:#include#includeusing namespace std;bool Judge(int原创 2011-12-21 13:48:52 · 815 阅读 · 0 评论 -
poj 1050To the Max(最大子矩阵和 DP 二维)
说起来这道题,就是把二维的数组化成一维的来计算……#includeint main(){ int a[102][102]; int s[102][102]; int n; int i, j, k; int m, temp; int max=-1000000; scanf("%d", &n); for(i=0; i<n; i原创 2011-08-20 19:50:15 · 421 阅读 · 0 评论 -
hdu 2151Worm(dp)
很久没做过DP了, 这题的状态转移方程是dp[i][j]=dp[i-1][j+1]+dp[i-1][j-1], 当然,要注意边界的处理和初始化。开始时我觉得可以将其状态由二维压缩到一维, 写出来了结果发现多了很多, 再仔细想了一下,发现这个没法压缩到一维, 因为j 在j-1和j+原创 2011-10-02 02:20:28 · 674 阅读 · 0 评论 -
poj 1887Testing the CATCHER(最长下降子序列)
令我很无语,这道题……Testing the CATCHERTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 10919 Accepted: 3951原创 2011-08-20 19:38:47 · 646 阅读 · 0 评论 -
poj 1458Common Subsequence(最长公公子序列)
水题,水过……Common SubsequenceTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 25577 Accepted: 9891原创 2011-08-20 22:10:26 · 571 阅读 · 0 评论 -
poj 1384Piggy-Bank(完全背包)
这是一道完全背包问题,不过这个需要恰好装满……以下为背包问题三种情况……1:如果求最大价值且恰好装满,那么在初始化时将dp[0]为0, 其余为负无穷大2:如果求最小价值且恰好装满,那么在初始化时将dp[0]为0, 其余为正无穷大3:如果没有要求恰好装满,则原创 2011-08-21 14:18:04 · 659 阅读 · 0 评论 -
poj 1276Cash Machine(多重背包, 二进制划分)
赤裸裸的多重背包问题;方法一:直接三重循环,这种方法会超时地……for(i=1; i<=n; i++){ for(j=cash; j>=dk[i]; j--) { for(k=1; k<=nk[i]; k++) { if( j<k*dk[i]) b原创 2011-08-21 14:34:19 · 477 阅读 · 0 评论 -
1014 Dividing(多重背包 二进制划分)
这道题和poj1276Cash Machine几乎完全一样……#include#includeint main(){ int num[7]; int sum; int dp[80001]={0}; int i, j, k, temp; int原创 2011-08-21 14:41:37 · 461 阅读 · 0 评论 -
poj 1088 滑雪(DFS +DP 记忆化搜索)
看到这这个题的时候,我想到了用动归,但不知怎嘛用,也考虑了DFS, 但仍然不知怎嘛用……无奈,上网参考了一下别人的代码,才AC了……哎,我是菜鸟啊……#includeusing namespace std;int r, c;int a[101][101];int dp[原创 2011-08-22 16:26:18 · 727 阅读 · 0 评论 -
hdoj 1003Max Sum
简单的DP, 求最大连续子段和, 只不过需要加一个记录路径的……#include using namespace std;struct Node{ int sum; int s; int e;}dp[100001];int main( ){ int t,原创 2011-10-01 22:19:15 · 470 阅读 · 0 评论 -
hdu 1028Ignatius and the Princess III(整数划分)
很水的一道题,DP可以, 母函数也可以……母函数代码:#include#includeusing namespace std;int main(){ int n, num1[124], num2[124];//对小于100的整数进行划分 int i原创 2011-10-02 02:20:18 · 518 阅读 · 0 评论 -
hdu 2546 饭卡(简单DP)
简单, 但是需要细心 思路一: 首先判断m是否大于等于5 先取出来最贵的, 对其他的用m-5进行01背包,然后答案就出来了 思路二: 先判断 因为最贵50元所以对m+50进行DP #include#include#include us原创 2012-07-28 16:49:44 · 551 阅读 · 0 评论