动态规划
zafkiel_nightmare
弱弱的程序员
展开
-
hdu 1398 Square Coins
题意,有17种硬币,面值为,1(1*1) ,4(2*2)..........289(17*17)输入n,问n有多少种用硬币的组合方式.思路:嘛嘛,很水的dp.#include#includeusing namespace std;int a[18],dp[301];int main(){ int i,j; a[0]=0; for(i=1;i<18;i++) { a原创 2015-01-29 13:39:15 · 408 阅读 · 0 评论 -
hdu 2845 Beans
给你一个矩阵,若取其中一个数,则不能取左右相邻的数和上下相邻两行的数,求能取出数字之和的最大值思路:对于一行来说,相邻的数不可同时取,容易得到状态转移方程:sum[i] = max (sum[i-2]+sum[i], sum[i-1]),其中sum[i]表示一行前i个数时的最大和;然后把sum[m]保存到另一个数组中,对于每一行都这么做,然后最后在对数组再次进行一边这样的操作就行了#inc转载 2015-06-26 19:51:38 · 311 阅读 · 0 评论 -
vijos 1104 采药
简单背包问题并没有难度#include#include#include#include#include#include#include#include#include#include#include#define maxn 1000+5using namespace std;struct stu{ int time,vaule;};stu a[maxn];原创 2015-06-11 18:23:49 · 573 阅读 · 0 评论 -
hdu 1712 ACboy needs your help
第一道分组背包,虽然自己不会做,但是看了别人的代码后立刻就明白了#include#includeusing namespace std;int a[105][105];int dp[105];int main(){ int n,m; while(cin>>n>>m&&(n&&m)) { for(int i=1;i<=n;i++) { for(int j=1;j<原创 2015-08-24 20:27:35 · 370 阅读 · 0 评论 -
hdu 4540 威威猫系列故事——打地鼠
虽然是dp,写出来感觉和枚举一个意思#include#include#define maxn 21using namespace std;int a[maxn][maxn];int dp[maxn][maxn];int main(){ int n,k; while(cin>>n>>k) { for(int i=0;i<n;i++) { for(int j=0;原创 2015-09-16 21:06:58 · 397 阅读 · 0 评论 -
hdu 4212 吉哥系列故事——完美队形I
将数组反转,求最长上升公共子串#include#include#define maxn 210using namespace std;int a[maxn],b[maxn],n;void input(){ cin>>n; for(int i=1,j=n;i<=n;i++,j--) { cin>>a[i]; b[j]=a[i]; }}int solve(){原创 2015-11-09 22:08:54 · 305 阅读 · 0 评论 -
hdu 4502 吉哥系列故事——临时工计划
排序之后01背包#include#include#include#define maxn 1005using namespace std;int m,n;struct stu{ int s,e,v;};stu mapp[maxn];int dp[105];bool cmp(stu x,stu y){ return x.e<y.e; }void ini原创 2015-09-23 00:26:05 · 384 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus
http://www.cnblogs.com/kuangbin/archive/2011/08/04/2127085.html#include#define inf 1<<30#define maxn 1000010using namespace std;int m,n;int maxx[maxn],f[maxn],dp[maxn];void input(){ dp[0]=ma原创 2016-03-30 22:23:28 · 243 阅读 · 0 评论 -
hdu 1081 To The Max
最大子矩阵和,原来好像在哪里做过,忘了,将二维压缩成一维,然后最大子段和搞定#include#include#define maxn 105using namespace std;int n,f[maxn][maxn],sum[maxn][maxn],a[maxn],re; void input(){ memset(sum,0,sizeof(sum)); re=-1<<30;原创 2016-04-06 22:28:15 · 210 阅读 · 0 评论 -
hdu 2546 饭卡
单独拿5块出来买最贵的东西,然后对接下来的m-5块钱和n-1道菜做01背包处理#include#include#include #define maxn 1000+5using namespace std;int n,m;int p[maxn];int dp[maxn];int main(){ while(cin>>n&&n) { for(int i=0;i>p[i]原创 2015-06-25 20:45:22 · 519 阅读 · 0 评论 -
hdu 1159 Common Subsequence
求2个字符串的公共最长子序列简单dp,dp[i][j]表示串前i个字符与b串前j个字符的公共最长子序列#include#include#define maxn 1000+5 using namespace std;string a,b;int dp[maxn][maxn];int main(){ while(cin>>a>>b) { memset(dp,0,sizeo原创 2015-05-04 19:32:57 · 330 阅读 · 0 评论 -
hdu 2512 一卡通大冒险
简单dpdp[i][j]表示i长卡放到j本书里#include#include#define maxn 2000+5using namespace std;int dp[maxn][maxn];void ready(){ memset(dp,0,sizeof(dp)); dp[1][1]=1;dp[2][1]=dp[2][2]=1; for(int i=2;i<=2000原创 2015-05-10 15:02:35 · 561 阅读 · 0 评论 -
hdu 1421 搬寝室
dp题,虽然有点水,但还是发生了不少的意外.思路:首先我们要意识到(1)2个物体的重量越接近,疲劳度最小。因此要对输入的所有物品的重量排序。 (2)采用dp[i][j]表示前i个物品中搬j对的最少疲劳。 (3)dp方程if(i==2原创 2015-01-28 21:18:22 · 367 阅读 · 0 评论 -
hdu 2111 Saving HDU
简单的dp问题,#include#define maxn 1000using namespace std;int dp[maxn];int main(){ int v,n; while(cin>>v&&v) { memset(dp,0,sizeof(dp)); int a[1005]; cin>>n; int i,j,t=0; for(i=0;i<n;i++原创 2015-02-07 22:41:26 · 371 阅读 · 0 评论 -
hdu 2151 Worm
最简单的动归,当然,我也只会最简单的,不开心心塞中#include#includeusing namespace std;int dp[100+5][100+5];int main(){ int n,p,m,t; while(cin>>n>>p>>m>>t) { memset(dp,0,sizeof(dp)); dp[0][p]=1; for(int i=1;i<=原创 2015-04-11 16:50:31 · 519 阅读 · 0 评论 -
hdu 1231 最大连续子序列
状态:f[i]:以i为结尾最长连续序列状态转移:f[i]=max{f[i-1]+rem[i],rem[i]}初始状态:f[0]=rem[0];#include#define maxn 10000+5using namespace std;int rem[maxn];int f[maxn];int st[maxn];int main(){ cin.sync_with_stdio(fa原创 2015-04-24 19:45:00 · 467 阅读 · 0 评论 -
vijos 1025 小飞侠的游园方案
01背包,无压力#includeusing namespace std;int dp[1000+5]={0};int main(){ int i,j,n,t; cin>>n>>t; int pr[n][2]; for(i=0;i<n;i++) { cin>>pr[i][0]>>pr[i][1]; } for(i=0;i<n;i++) { for(j=t;j>=p原创 2015-02-23 16:54:40 · 507 阅读 · 0 评论 -
hdu 1087 Super Jumping! Jumping! Jumping!
给出一个序列,求所有上升序列中和最大的一个值m,(该序列不一定连续)例如4 1 3 2 4这组数据的结果为8#include#include#define maxn 1000+5using namespace std;int rem[maxn],dp[maxn];int main(){ int n; while(cin>>n&&n) { for(int i=0;i>r原创 2015-04-25 19:54:31 · 544 阅读 · 0 评论 -
hdu 1203 I NEED A OFFER!
背包问题还是不够熟练唉,用了好长时间#include#include#define maxn 10005using namespace std;double dp[maxn];struct school{ int price; double p;};int main(){ int i,j,n,m; while(cin>>n>>m) { if(!m&&!n){br原创 2015-02-07 16:14:41 · 320 阅读 · 0 评论 -
hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
简单的01背包#includeusing namespace std;int dp[105];struct stu{ int price,weight,sum;};int main(){ cin.sync_with_stdio(false); int t; cin>>t; while(t--) { int m,n; cin>>m>>n; stu a[n];原创 2015-02-23 18:06:03 · 459 阅读 · 0 评论 -
hdu 1011 Starship Troopers
树形DP#include#include#include#define maxn 105using namespace std;int c[maxn],d[maxn];vectormapp[maxn];int dp[maxn][maxn];int visit[maxn];int n,m;void input(){ for(int i=1;i<=n;i++) { c原创 2016-03-28 18:09:54 · 282 阅读 · 0 评论