讨论 / 为什么我也没输出啊。一脸懵逼。(记忆化搜索)
1213148423 2016-08-09 22:17:35
点我顶贴 收藏 删除
#include "stdio.h"

int rec[35][1080005];

int n,t;

int vi[35][3];

int ti[35][3];

int max(int a,int b,int c)

{

if(a>=b && a>=c)

return a;

if(b>=a && b>=c)

return b;

if(c>=a && c>=b)

return c;

}

int f(int i,int j)

{

if(rec[i][j]!=0)

return rec[i][j];

if(j<0)

return -99999999;

if(i==0 || j==0)

return 0;

int a,b,c;

a=f(i-1,j-ti[i][1])+vi[i][1];

b=f(i-1,j-ti[i][2])+vi[i][2];

c=f(i-1,j);

rec[i][j]=max(a,b,c);

return rec[i][j];

}

int main(int argc, char* argv[])

{

//freopen("PID160.in","r",stdin);

scanf("%d %d",&n,&t);

for(int i=1;i<=n;i++)

scanf("%d %d %d %d",&vi[i][1],&ti[i][1],&vi[i][2],&ti[i][2]);

printf("%d",f(n,t));

return 0;

}

#1 1213148423@2016-08-09 23:39:44
回复 删除
我知道了,j<0的判断要放最前面,不然就越界了
#2 1213148423@2016-08-10 00:31:23
回复 删除
有一个点居然超时……
查看更多回复
提交回复