(RQoj 15 采药------rwkj 10.1.5.253 1447) 记忆式搜索 2

#include <iostream>
#include <string.h>
using namespace std;
int dp[105][1005], w[105],v[105],T,M,;
int max(int x,int y) { return x>y?x:y; }
int f(int x,int y)
{ int t;
if (dp[x][y]!=-1) return dp[x][y];
if ( x==M+1 || y==0 ) return dp[x][y]=0;
else
{ t=f(x+1,y);
if ( y>=w[x] ) dp[x][y]=max(t,f(x+1,y-w[x])+v[x] ); else dp[x][y]=t;
}
return dp[x][y] ;
}
int main()
{ int i,j;
cin>>T>>M;
for ( i=1; i<=M; i++) cin>>w[i]>>v[i];
memset(dp,-1,sizeof(dp));
f(1,T);
cout<<dp[1][T]<<endl;
return 0;
}

(RQoj 15 采药------rwkj 10.1.5.253 1447) 记忆式搜索 2,布布扣,bubuko.com

时间: 2024-10-05 14:35:17

(RQoj 15 采药------rwkj 10.1.5.253 1447) 记忆式搜索 2的相关文章

(RQoj 15采药------rwkj 10.1.5.253 1447) 记忆式搜索 1

#include <iostream>using namespace std;int dp[105][1005],w[105],v[105] ; int max(int a,int b) { return a > b ? a : b; }int f(int x,int y){ int t ; if(dp[x][y]!=-1) return dp[x][y] ; if(x==0 || y==0 ) return dp[x][y]=0 ; else { t=f(x-1,y) ; if(y&g

(RQoj 15 采药------rwkj 10.1.5.253 1447) 动态规划 DP 1

#include <iostream>#include <string.h>using namespace std;int dp[105][1005], w[105],v[105],T,M;int max(int x,int y){ return x>y?x:y; } void f( ){ int i,j; for (i=1; i<=M; i++) for (j=0;j<=T; j++) { if (i==0) dp[i][j]=0; else dp[i][j]=

(RQoj 15 采药------rwkj 10.1.5.253 1447) 动态规划 DP 2

70 371 10069 11 2 #include <iostream>#include <string.h>using namespace std;int dp[105][1005], w[105],v[105],T,M;int max(int x,int y){ return x>y?x:y; }void f( ){ int i,j; for (i=M; i>=1; i--) for (j=0;j<=T; j++) { if (i==M+1) dp[i][j

(RQoj 15 采药------rwkj 10.1.5.253 1447) 递归 2

#include <iostream>#include <string.h>using namespace std;int dp[105][1005], w[105],v[105],T,M,;int max(int x,int y) { return x>y?x:y; }int f(int x,int y){ int t; if ( x==M+1 || y==0 ) return dp[x][y]=0; else { t=f(x+1,y); if ( y>=w[x] )

(RQoj 15 采药------rwkj 10.1.5.253 1447) 动态规划 DP 3

#include <iostream>#include <string.h>using namespace std;int dp[1005], w[105],v[105],T,M;int max(int x,int y) { return x>y?x:y; }void f( ){ int i,j; for (i=1; i<=M; i++) for (j=T;j>=0; j--) if (j>=w[i]) dp[j]=max(dp[j],dp[j-w[i]]+

(RQoj 15 采药------rwkj 10.1.5.253 1447) 网上

#include<stdio.h>int max(int x,int y){ int z; if (x>y) z=x; else z=y; return z;} int max(int a,int b){ return a > b ? a : b;} int main(){ int time[100],value[100]; int f[1000]={0}; int t,m,i,j; int max(int x,int y);//.....比较两个数的大小. scanf("

(RQoj 15 采药------rwkj 10.1.5.253 1447) 递归 1

#include <iostream>using namespace std;int dp[105][1005],w[105],v[105] ; int max(int a,int b) { return a > b ? a : b; }int f(int x,int y){ int t ; if(dp[x][y]!=-1) return dp[x][y] ; if(x==0 || y==0 ) return dp[x][y]=0 ; else { t=f(x-1,y) ; if(y&g

rwkj 1505 poj 1258 10.1.5.253 1505

#include <iostream>// poj 1258 10.1.5.253 1505using namespace std; #define N 105 // 顶点的最大个数 (多写 int a[N][N],low[N],n,ans;int min(int x,int y){ return x<y?x:y; } void prim(int u0) { int i,j,m,k; ans=0; // for (i=1;i<n;i++) low[i]=a[u0][i]; // l

nyoj 10——skiing————————【记忆化搜索】

skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 一个人可