![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP(动态规划)
他们叫我无极
普普通通,简简单单,真真切切,实实在在。
展开
-
HDU 3496 - Watch The Movie
知识点:二维背包#include #include int dp[101][1001],m,l;inline int max(int a,int b){ return a>b ? a : b;}void PlanarPack(int val,int ti,int temp){ if(ti<=l) { for(int i=m=1;i原创 2011-11-10 12:37:37 · 355 阅读 · 0 评论 -
HDU 2955 - Robberies
知识点:01背包的概率问题当前的概率基于前一种状态的概率,即偷n家银行而不被抓的概率等于偷n-1家银行不被抓的概率乘以偷第n家银行不被抓的概率。用dp[i]表示偷价值为i时不被抓的概率,则状态转移方程为:dp[i]=max(dp[i],dp[i-m]*(1-p))。#include #include double dp[10001];int sum;inline doubl原创 2011-11-10 12:35:05 · 374 阅读 · 0 评论 -
HDU 1503 - Advanced Fruits
知识点:最长公共子序列(LCS)dp[i][j]记录到a的第i个字符和b的第j个字符为止公共子序列的长度;path[i][j]记录公共子序列的走向;member[i]保存最长公共子序列的成员。#include #include int main(){ char a[101],b[101],member[101]; int dp[101][原创 2011-11-10 12:14:47 · 258 阅读 · 0 评论 -
HDU 1009 - FatMouse' Trade
知识点:贪心算法最简单的贪心:优先选择性价比高的。#include #include struct Cat{ int J; int F; double per; //性价比};inline int cmp(const void *a,const void *b){ return ((Cat *)b)->per>((Cat *)a)->p原创 2011-11-10 12:09:18 · 259 阅读 · 0 评论 -
HDU 1160 - FatMouse's Speed
知识点:最长有序(上升)子序列#include #include struct Mouse{ int weight; int speed; int num; //记录当前老鼠排序前的序号 int last; //记录为当前dp提供更新的前一个老鼠排序后的序号}mouse[1000];//结构体一级排序,按weight从小到大inlin原创 2011-11-10 11:59:45 · 309 阅读 · 0 评论 -
HDU 2037 - 今年暑假不AC
知识点:贪心 + 结构体一级排序#include #include struct TV{ int Ti_s; int Ti_e;};inline int cmp(const void *a,const void *b){ return ((TV *)a)->Ti_e-((TV *)b)->Ti_e;}int main(){ int n;原创 2011-11-10 11:36:08 · 272 阅读 · 0 评论 -
HDU 1003 - Max Sum
知识点:最大连续子序列和哇哈哈,一不小心刷到前10名去了,偷笑ING……#include bool scan_d(int &n) //整数输入外挂,减少时间{ char i; bool I=0; i=getchar(); if(i==EOF) return 0; while(i!='-'&&(i'9')) i=getchar();原创 2011-11-10 11:07:58 · 197 阅读 · 0 评论 -
HDU 2844 - Coins
知识点:多重背包多重背包由01背包和完全背包构成,有了01和完全的基础,多重还是挺好理解的。#include #include bool dp[100001];int V;void ZeroPack(int val){ for(int v=V;v>=val;v--) if(dp[v-val]) dp[v]=1;}void CompletePack(i原创 2011-11-10 10:53:55 · 252 阅读 · 0 评论 -
HDU 1248 - 寒冰王座
知识点:完全背包背包总体上有两种使用方法:1、当物品的价值和体积不等时,用dp[ ]表示价值。2、当物品的价值和体积相等时,用dp[ ]表示状态。例如本题中,dp[i]==0表示无法达到价值i;dp[i]==1表示可以达到价值i。其它的背包也有这种性质。#include #include bool dp[10001];int V;void ComplatePack(原创 2011-11-10 11:45:07 · 315 阅读 · 0 评论 -
HDU 1176 - 免费馅饼
知识点:1、数塔; 2、整数(int 型)输入外挂(可大大缩短数据输入的时间,对于数据庞大的题目效果显著)。#include #include //整数输入外挂,减少时间bool scan_d(int &n) { char i; bool I=0; i=getchar(); if(i==EOF) return 0原创 2011-11-10 12:19:16 · 243 阅读 · 0 评论 -
HDU 2059 - 龟兔赛跑
知识点:DP#include int main(){ int l; while(scanf("%d",&l)!=EOF) { int n,c,t,vr,v1,v2; scanf("%d%d%d%d%d%d",&n,&c,&t,&vr,&v1,&v2); double dp[102]; //dp[i]表示从出发点原创 2011-11-10 11:30:36 · 308 阅读 · 0 评论 -
HDU 2602 - Bone Collector
知识点:01背包01背包是基础,一定要把01背包真正搞懂,那其它的背包就容易懂了。#include #include int dp[1001],V;inline int max(int a,int b){ return a>b ? a : b;}void ZeroOnePack(int val,int vol){ for(int v=V;v>=vol原创 2011-11-10 12:26:57 · 227 阅读 · 0 评论 -
HDU 2159 - FATE
知识点:二维背包只是在一维的基础上加一维,其它的都一样。#include #include int dp[100][100],m,s;inline int max(int a,int b){ return a>b ? a : b;}void PlanarPack(int a,int b){ for(int i=b;i<=m;i++) for(原创 2011-11-10 11:19:14 · 233 阅读 · 0 评论 -
HDU 1085 - Holding Bin-Laden Captive!
知识点:母函数母函数类似背包,也有两种使用方法:1、用 f1、f2 存储放法数;2、用 f1、f2 存储状态。例如本题中:f1[i]==1 表示 i 值可以达到,f1[i]==0 表示 i 无法达到。#include int main() { int num_1,num_2,num_5; while(scanf("%d%d%d",&n原创 2011-11-10 10:35:25 · 247 阅读 · 0 评论