ACM dp 动态规划
huixisheng
无所谓结果如何,只要一直坚持并努力就好!!
展开
-
饭卡 hdu2546
http://acm.hdu.edu.cn/showproblem.php?pid=2546// 很想0 1背包的问题,可是又有很大的变形,一开始以为是贪心,写了一个好囧的代码,wrong// 又写了一个不是很熟悉的0 1 背包, 又wrong。好好努力!! #include//2251214 2010-03-26 18:00:08 Accepted 2546 31MS 304K 557 B原创 2010-03-26 18:07:00 · 423 阅读 · 0 评论 -
hdu 1171多重背包Big Event in HDU
<br />/* 多重背包,其实对于这部分的内容不是很理解的,但是还是做对了,很奇怪的*/#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int N = 55;int main(){ int n; int val[N], kind[N]; int dp[100000]; while( cin >> n) { if(n < 0原创 2010-07-10 16:56:00 · 1003 阅读 · 1 评论 -
hdu 1712 ACboy needs your help 分组背包
<br />/* 根据分析写的代码wrrong了,先放在这里,如果哪位大牛会的话,麻烦帮忙修改下 把m天时间当成背包,每门课分成一类,每一类里有m个物品 分别是上该门课j天得到的收获,同一类物品只能选一个 这道题目太傻比了,输入的是n * m 的, 而我输入是n * n 可恶的sample居然是过的,悲剧*/#include <iostream>#include <algorithm>using namespace std;int main(){ in原创 2010-07-10 22:09:00 · 782 阅读 · 8 评论 -
hdu 2844 Coins 多重背包优化 很好
/* 又是一道多重背包的变形,一开始转化为0-1背包连sample都没有过了,后来用了母函数,看看复杂程度 超时是难免的,最后还是要用多重背包,但是用了优化 将第i种物品分成若干件物品,其中每件物品有一个系数, 这件物品的费用和价值均是原来的费用和价值乘以这个系数。 使这些系数分别为 1,2,4,...,2^(k-1),n[i]-2^k+1,且k是满足n[i]-2^k+1>0的最大整数 例如,如果n[i]为13,就将这种 物品分成系数分别为1,2,4,6的四件物品。*/原创 2010-07-10 20:57:00 · 812 阅读 · 0 评论 -
hdu 1203 I NEED A OFFER!
<br />/* 0-1背包的乘法,到至少一份offer的最大概率: 1 - (1 - p1)* (1 - p2); 一:pro[n] 用n最大得到一份offer的概率, 输出地时候比较让人郁闷的,用两个%% pro[j] = max(pro[j], 1 - (1 - pro[j - cost[i]]) * (1 - offer[i])); 二 :pro[n] 用n最小的不到offer的概率 pro[j] = min(pro[j] , (1 - pro[j - i原创 2010-07-09 18:44:00 · 1363 阅读 · 1 评论 -
FATE hdu 2159 二维的完全背包
<br />/*以下分析有参考Baidu 的,刚开始学背包,感觉不顺手啊。二维的完全背包,状态转移方程:dp[i][j] = max(dp[i][j], dp[i - df[t].care][j - 1] + df[t].expr)dp[i][j] 消耗i的忍耐度获得的最大经验值,只要dp[i][s] >= n 就可以找到答案dp[i][j]表示杀i个怪剩j忍耐值获得的最大经验值 状态方程:dp[i][j] = max(dp[i][j], dp[i - 1][j - df[t].ca原创 2010-07-08 19:17:00 · 391 阅读 · 0 评论 -
hdu 1114 完全背包
<br />/* 完全背包,且是恰好装满,求最小价值,初值 dp[0]=0,dp[i]=Max( 1<=i<=W ) 状态转移方程 dp[j]=min(dp[j],dp[j-we[i]]+va[i]) 最后只要dp[W]!=Max 就有最优解! */import java.io.*;import java.util.*;public class Main{ public static void main(String[] args) {原创 2010-07-07 16:16:00 · 563 阅读 · 0 评论 -
hdu 2602 0 - 1背包
<br />/* 好久没有用java写了。代码写的好丑的,简单的0 - 1背包 DP[i][j]表示前i个物品,背包容量为j的最优值 状态转移方程为 DP[i][j] = max(DP[i-1][j] , DP[i-1][j-v[i]] + w[i]); 时间复杂度N*V , 空间复杂度N*V 所以伪代码如下: for i = 所有物品 for j = V to v[i] dp[j] = max(dp[j] , dp[j-v[i]] + w[原创 2010-07-07 12:58:00 · 359 阅读 · 0 评论 -
Worm hdu2151
// num[i][j] 表示爬到i课数j分钟的方法数#include//2309016 2010-04-07 20:51:05 Accepted 2151 0MS 324K 618 B C++ 悔惜晟 using namespace std;int main(){ int num[101][101]; int i, j, n, p, m, t; while(cin>>n>>p>>m>>t) {原创 2010-04-07 20:55:00 · 494 阅读 · 0 评论 -
最大子矩阵 hdu 1559
//题目的意思很简单,而且给我们的时间10秒,一开始用了很笨的方法,直接模拟,超时//改了之后效率明显升高#include//2321883 2010-04-10 11:57:25 Accepted 1559 125MS 4156K 623 B C++ 悔惜晟 #include#includeusing namespace std;int num[1001][1001];int main(){ i原创 2010-04-10 12:04:00 · 605 阅读 · 0 评论 -
最少拦截系统 hdu 1257
//一开始题目读错5 7 3 5 1 2输出地应该为2的,一开始题目读的认真,因为是求最大的连续的递减子序列#include//2313056 2010-04-08 17:47:13 Accepted 1257 15MS 348K 629 B C++ 悔惜晟 #includeusing namespace std;int num[100005];int main(){ int n, count原创 2010-04-08 17:50:00 · 351 阅读 · 0 评论 -
hdu 1159 (最长公共子序列)
//f(i,j)= {f(i-1,j-1)+1 (a[i]==b[j]) // max(f(i-1,j),f(i,j-1)) (a[i]!=b[j]) ////由于f(i,j)只和f(i-1,j-1), f(i-1,j)和f(i,j-1)有关, 而在计算f(i,j)时, 只要选择一个合适的顺序, 就可以保证这三项都已经计算出来了, 这样就可以计算出f(i,j). 这样一直推到f(le原创 2010-04-07 20:19:00 · 1067 阅读 · 2 评论 -
1160 hdu(最大递增子序列)
#include//2307385 2010-04-07 18:55:39 Accepted 1160 15MS 256K 1004 B C++ 悔惜晟 #include#includeusing namespace std;struct stu{ int w; int s; int num;}df[1005];int cmp(stu a, stu b){ if(a.w == b.w) re原创 2010-04-07 18:58:00 · 530 阅读 · 0 评论 -
hdu 1081
//一个最大连续字串和的改编题,把一维变成了二维的,//那么解这个题的思路就是把二维变成一维就可以了。那么怎么变呢://从第一行开始往下把下面的行加上去,就变成一行了,那么再用一维的DP就可以了。#include//2331655 2010-04-12 17:44:08 Accepted 1081 15MS 280K 766 B C++ 悔惜晟 #include#includeusing name原创 2010-04-12 17:50:00 · 509 阅读 · 0 评论 -
hdu 1069
//终于AC了,郁闷了好久//其实是求最大递减子序列//长方体要考虑三个面#include//2315666 2010-04-08 23:56:20 Accepted 1069 0MS 244K 1227 B C++ 悔惜晟 #include#include#includeusing namespace std;struct stu{ int x; int y; int z;}df[95];原创 2010-04-09 00:00:00 · 830 阅读 · 0 评论 -
hdu 1421 搬寝室
//效率好低//状态Dp[i][j]为前i件物品选j对的最优解// 当i=j*2时,只有一种选择即 Dp[i-2][j-1]+(w[i]-w[i-1])^2// 当i>j*2时,Dp[i][j] = min(Dp[i-1][j],Dp[i-2][j-1]+(w[i]-w[i-1])^2#include//2313563 2010-04-08 19:12:40 Accepted 1421原创 2010-04-08 19:15:00 · 368 阅读 · 0 评论 -
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 hdu2191
http://acm.hdu.edu.cn/showproblem.php?pid=2191// 一开始以为可以用贪心的,可是wrong 后来一想肯定是不行的。//原来这是一个多重背包的问题,后来去查看了相关的资料,不过还不是很懂,特别是动态方程的转移,总是不很熟练的//for(i = 1..n )// for(j = v..0 )// f[v] = max(f[v], f[v - c[i]原创 2010-03-26 12:18:00 · 488 阅读 · 0 评论 -
hdu 1059 Dividing 多重背包
<br />/* 又是一道多重背包的题目,其实我对于背包还是不懂,但是凭着记忆的动态方程 居然能打出可以AC的代码,还奇怪的*/#include <iostream>//00451533 2010-07-10 18:40:39 Accepted 1005 15 MS 412 KB Visual C++ 悔惜晟 #include <cstdio>#include <cstring>using namespace std;const int N = 60005;int m原创 2010-07-10 18:57:00 · 1058 阅读 · 2 评论