DP Review 2

劲歌金曲

洛谷链接

Analysis

这一道题真的好坑啊。时间他给的数据范围是十的九次方,但是你看了别的条件又会发现实际上是超过不了一万的,所以呢,直接就选择用0/1背包做就可以了。值得一提是初始化不可以初始化为0,你会惊喜的发现,自己的唱歌时间是过不了的。所以我们选择不做这道题。所以我们选择初始化为-1,然后f[0]=0来做就可以了

Code

#include<bits/stdc++.h>
#define Mod 1000007
#define maxn 55
#define maxt 100003
#define jgjq 678
using namespace std;
int n,t,T;
int t_cost[maxn];
int f[maxt];
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&t);
		for(int i=1;i<=n;i++)scanf("%d",&t_cost[i]);
		memset(f,-1,sizeof(f));
		f[0]=0;
		for(int i=1;i<=n;i++){
			for(int j=t-1;j>=t_cost[i];j--){
				f[j]=max(f[j],f[j-t_cost[i]]+1);
			}
		}
		int ans=t-1;
		for(int i=t-1;i>=0;i--){
			if(f[i]>f[ans])ans=i;
		}
		printf("%d %d\n",f[ans]+1,ans+jgjq);
	}
	return 0;
}

最后按照要求输出啊,我是在别的地方提交的,所以就没有按照洛谷的格式来

没别的了,因为自己比较懒,所以就给这么多了

posted @ 2019-02-20 17:41  Perisino  阅读(221)  评论(0编辑  收藏  举报