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; }
最后按照要求输出啊,我是在别的地方提交的,所以就没有按照洛谷的格式来
没别的了,因为自己比较懒,所以就给这么多了
我不求被他人理解,被理解类似于自我卖淫