首页 > 简单的烦恼
头像 Strugglers
发表于 2020-02-11 16:06:58
每人发,我就来解释一下吧!由读题可发现,若想听时间尽可能长的歌,在背包容量这一块儿不能设为t,就像样例那样:t=3+4,那就转化成了01背包(原版)。所以在这里背包容量设为t-1;访问的物品数量因为背包容量,所以被设为了n-1又因为抛弃了原版,所以在输入完毕后sort摆个序,最后的结果也就是f[t- 展开全文
头像 pphkaa
发表于 2020-04-14 00:45:52
这题思路就是:讲最场的歌曲在最后一分钟播放,剩下n-1首歌曲在t-1时间内求最大值以例子演示一下:注意这里最大时长已经被预订最后一分钟播放 1 2 3 4 5 6 0 0 0 0 0 0 先加入时长为2的歌曲变为 0 2 2 2 2 2 加 展开全文
头像 可菲
发表于 2020-08-07 17:42:40
public static void main(String[] args){ Scanner sc = new Scanner(System.in); int T = sc.nextInt(); int ans=0; for(int 展开全文
头像 夜语声烦-
发表于 2021-12-10 13:11:39
完全背包 #include<iostream> #include<algorithm> #include<cstring> using namespace std; int t; int n,m; int a[410]; int dp[80010]; int 展开全文
头像 太极0
发表于 2024-04-11 13:26:55
用一个vector保存所有歌曲时间,先对歌曲时间排序,前n-1首歌曲均为选放,而最后一首也就是最长一首为必放,也就是用t-1大小的背包存n-1首歌,转化为简单的01背包问题就可以写代码了 #include<bits/stdc++.h> using namespace&nbs 展开全文
头像 usin
发表于 2023-04-14 15:36:09
输入描述: 第一行一个整数 T(T <= 23),表示数据组数。 在每组输入数据中,第一行有两个正整数,n(n <= 200), t(t <= 80000),分别表示歌单中歌曲的数目,和题目描述中的t。 第二行中有 n 个正整数 a[i](a[i] <= 400) ,表示 展开全文
头像 牛客900093746号
发表于 2023-10-19 13:19:45
#include<bits/stdc++.h> using namespace std; int main(){ int T; cin>>T; while(T--){ int n,t; cin>>n>& 展开全文