
动态规划
精神小伙mqpm
这个作者很懒,什么都没留下…
展开
-
3-1独立任务最优调度问题
题目:用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间i a ,若由机器B 来处理,则需要时间i b 。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai >=bi,而对于某些j,j≠i,有aj < bj 。既不能将一个作业分开由2 台机器处理,也没有一台机器能同时处理2 个作业。设计一个动态规划算法,使得这2 台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例: (a1,a2,a3,a4,a5,a6)=(2原创 2021-01-20 17:05:06 · 459 阅读 · 0 评论 -
HDU - 2159二维DP
最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗?Input输入数据有多组,对于每组数据第一行输入n,m,k,s(0 < n,m,k,s < 100)四个正原创 2020-08-21 21:06:39 · 252 阅读 · 0 评论 -
最少拦截系统 HDU - 1257
题意 : 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.Input输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数原创 2020-08-21 15:53:18 · 180 阅读 · 0 评论 -
HDU 1003 最大子列和
题意 : 给出数组 求最大连续子列的和与起始终止位置思路: 从起始位置相加 若加到小于零了 更新起始位置 过程中更新sum的值代码:#include<bits/stdc++.h>using namespace std;int T;int a[1000001];int main(){ int T; cin >> T; for(int c = 1; c <= T; c++) { int n; cin >&g原创 2020-08-21 12:55:27 · 185 阅读 · 0 评论 -
饭卡 HDU - 2546——特殊的01背包
思路:先拿5元出来把最贵的买了,剩下的钱用01背包算可以买啥wa的点:1.又忘记初始化dp数组了。。。2.考虑当余额小于5的时候啥也买不了 输出m即可 手贱输出了5.。。。代码:#include<bits/stdc++.h>using namespace std;int dp[5001];int main(){ int n, m; while(cin >> n){ if(n <= 0) break; int pr.原创 2020-08-21 12:02:09 · 172 阅读 · 0 评论 -
hdu1114 完全背包
题意 : 给你一个罐子的自身重量和它最大的承受重量,再给你n种面值的硬币,接下来n行为每个硬币的价值和重量,让你求能恰好装满罐子的最小价值 如果没办法恰好装满则输出This is impossible.明显这是一个多重背包 我们知道完全背包的模板:for i=1..N for v=0..V f[v]=max{f[v],f[v-c[i]]+w[i]};但是这道题还要精确得出是否装满 若用上边的式子 无法判断 所以 可以将dp数组初始化为最大 每次更新时用min来更新 最后若dp[W]没有被更新到原创 2020-08-21 00:39:24 · 214 阅读 · 0 评论 -
poj1171 01背包
题意:给出n种设备价值与数目 求最佳平分将问题转化为01背包 从n+m种价值分别为val[i]~val[m+n]的物品中选出总和最接近sum/2的子集的和状态转移方程 :for(int i = 0; i < k; i++){ for(int v = sum/2; v >= val[i]; v--){ dp[v] = max(dp[v], dp[v-val[i]] + val[i]); }}代码 :#include<bits/stdc++.h&g原创 2020-08-20 23:31:18 · 179 阅读 · 0 评论 -
poj1159动态规划
ans = n - 字符串与反转字符串的最大公共子序列1.滚动数组 当前状态由上一行的状态转化来 使用两个数组滚动求出 还可继续优化2.笔误导致wa了大半天j没有加一代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;int max(int a, int b){ return a > b?a:b;}char s1[5001], s2[5001]原创 2020-08-20 18:54:48 · 344 阅读 · 0 评论 -
poj1163
dp模板题#include<iostream>using namespace std;int num[101][101];int f[101][101];int main(){ int n; cin >>n; for(int i = 0; i < n; i++){ for(int j = 0; j <= i; j++){ cin >> num[i][j]; if(原创 2020-08-20 18:50:36 · 124 阅读 · 0 评论 -
动态规划--01背包 poj4131
Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N(1 ≤ N≤ 3,402) available charms. Each charm iin the supplied list has a weight Wi(1 ≤ Wi≤ 400), a ‘desirability原创 2020-07-30 20:08:02 · 239 阅读 · 0 评论 -
动态规划—最长公共子序列
poj1458上代码#include<bits/stdc++.h>using namespace std;string s1, s2;int len1, len2;int T;int maxlen[101][101];int main(){ //memset(maxlen, 0, sizeof(maxlen)); while(cin >> s1 >> s2){ int len1 = s1.size();原创 2020-07-28 15:09:03 · 162 阅读 · 0 评论