动态规划
文章平均质量分 77
墨温温
呆萌理工女~ ~
展开
-
HDU 1160(我真的不会DP啊啊啊啊)
题意:有一大坨老鼠,每只老鼠都有体重和速度两个属性,为了证明越重的老鼠速度越慢,你需要找到一个最长的序列:体重递增,速度递减。思路:动态规划,注意要记录下老鼠的原始编号。AC代码: 参考kuangbinju哒哒哒~#include #include #include #include using namespace std;#define maxx 1005struct M原创 2015-07-17 21:01:55 · 527 阅读 · 0 评论 -
POJ 2342
Anniversary partyTime Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uDescriptionThere is going to be a party to celebrate the 80-th Anniversary原创 2015-08-19 17:20:58 · 568 阅读 · 0 评论 -
POJ 3186
思路:刚开始以为是贪心,结果发现当两端的数字相同时就不知道该怎么取了。 区间DP,从里向外推就可以了。AC代码:#include #include #include #include using namespace std;#define maxx 2010int dp[maxx][maxx];int main(){ int n,v[maxx]; while(sc原创 2015-07-20 11:41:02 · 401 阅读 · 0 评论 -
POJ 2533
题意:求最长递增子序列的长度,裸题。思路:DP即可。AC代码:#include #include #include using namespace std;#define maxx 1005int main(){ int n,v[maxx]; int dp[maxx]; while(scanf("%d",&n) != EOF) { for(int i = 1;原创 2015-07-20 11:58:20 · 546 阅读 · 0 评论 -
HDU 1260
题意:给出一些人买票的时间,可以一个人买,也可以相邻两人一起买,求所有人买完票的最短时间。思路:一维DP,dp[i]表示第i个人买票所需要的时间,这个人可以和前一个人一起买,也可以自己买。状态转移方程:dp[i]=min(dp[i-1]+t1[i],dp[i-2]+t2[i-1]),然后再注意初始化和对时间的处理就行了。AC代码:#include #include #inclu原创 2015-07-20 20:30:40 · 948 阅读 · 0 评论 -
HDU 1114
裸题:完全背包问题,求装满背包的最小价值。注意初始化,要求完全装满,除了容量为0的背包外,其他全部赋值为inf。AC代码:#include #include #include #include using namespace std;#define inf 0x7ffffffint main(){ int t,e,f,n; int w[505],v[505],dp[1原创 2015-07-20 09:55:34 · 598 阅读 · 0 评论 -
HDU 1087
题意:求上升序列的最大和。思路:简单DP。两重循环:dp[i]表示以v[i]结尾的最大和,状态转移方程dp[i]=max(dp[j]+v[i],dp[i]) (在v[j]AC代码:#include #include #include #include using namespace std;int main(){ int n,dp[1005],v[1005]; whil原创 2015-07-19 11:38:41 · 463 阅读 · 0 评论 -
HDU 1074
题意:给出了一堆科目,必须要完成的时间和完成某科所需要的时间,超过一天扣一分,求最少要扣的分数。思路:刚开始一直以为是贪心,却一直贪不出来~~ 看了别人的题解,才顿悟啊~ 状压DP,用二进制来表示某个科目的完成状态。比如样例一: 用111表示三科都完成了,101表示第一科和第三科完成了,这样就很easy~\(≧▽≦)/~啦啦啦。for(int i=1;ifor(int j=n-1;原创 2015-07-19 10:20:24 · 697 阅读 · 0 评论 -
HDU 1159 && POJ 1458
最长公共子序列,状态转移方程见代码。#include #include #include using namespace std;char s1[1005],s2[1005];int dp[1005][1005];int main(){ while(scanf("%s",s1+1)!=EOF) { scanf("%s",s2+1); memset(dp原创 2015-07-18 09:57:35 · 532 阅读 · 0 评论 -
HDU 1176
题意:中文题,不多说了。思路:简单动态规划,类似于数塔,自底向上计算即可。AC代码:#include #include #include #include using namespace std;int n,t,x;int dp[100005][12],maxt;int main(){ while(scanf("%d",&n)!=EOF&&n) { mems原创 2015-07-17 18:47:02 · 707 阅读 · 0 评论 -
ZOJ 3201
Tree of TreeTime Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %lld & %lluDescriptionYou're given a tree with weights of each node, you need to find the ma原创 2015-08-20 00:11:29 · 1076 阅读 · 3 评论