首页 > 其他分享 >P1833 樱花 题解

P1833 樱花 题解

时间:2023-07-22 19:33:14浏览次数:34  
标签:樱花 int 题解 len P1833 wi vi pi dp

二进制拆分

做法:把每一个物品根据2的多少次方拆分,因为任何数都可以转化为二进制数

核心思想:把每一个物品拆成很多个,分别计算价值和所需时间,再转化为01背包求解

最后一点:完全背包可以把他的空间记为999999,不要太大,一般百万就足够了

还有一点:cin和scanf不可以混用

代码

#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
inline void read(int &x) {
	x=0;
	short flag=1;
	char c = getchar();
	while(c<'0'||c>'9') {
		if(c=='-')flag=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') {
		x=(x << 3)+ (x << 1)+(c ^ 48);
		c=getchar();
	}
	x*=flag;
}
inline void write(int x) {
	if(x<0) {
		putchar('-');
		x=-x;
	}
	if(x>9)
		write(x/10);
	putchar(x%10+'0');
}
int h,h1,m,m1,n,dp[1000010],vi,wi,pi,len=1,t=1,v[1000010],w[1000010];
int main() {
	scanf("%d:%d %d:%d %d",&h,&m,&h1,&m1,&n);
	int tim=(h1*60+m1)-(h*60+m);
	//cout<<time<<"\n";
	for(int i=1;i<=n;i++){
		cin>>wi>>vi>>pi;
		t=1;
		if(pi==0) pi=9999999;
		while(pi>t){
			v[len]=t*vi;
			w[len]=t*wi;
			pi-=t;
			t*=2;
			len++;
		}if(pi>0){
			v[len]=pi*vi;
			w[len]=pi*wi;
			len++;
		}
	}
	for(int i=1;i<len;i++){
		for(int j=tim;j>=w[i];j--){
			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
		}
	}
	printf("%d",dp[tim]);
	return 0;
}

标签:樱花,int,题解,len,P1833,wi,vi,pi,dp
From: https://www.cnblogs.com/futao-657593/p/p1833-ti-jie.html

相关文章

  • P1679 神奇的四次方数 题解
    思路先枚举出\(n\)以内的4次方数然后dp.代码#include<bits/stdc++.h>#definelllonglong#defineldlongdouble#definemin(x,y)(x<y?x:y)usingnamespacestd;inlinevoidread(int&x){ x=0; shortflag=1; charc=getchar(); while(c<'0'......
  • P1757 通天之分组背包 题解
    思路分组背包模版题,不多说。代码#include<bits/stdc++.h>#definelllonglong#defineldlongdoubleusingnamespacestd;inlinevoidread(int&x){ x=0; shortflag=1; charc=getchar(); while(c<'0'||c>'9'){ if(c=='-......
  • 第二次比赛出题题解
    第二次比赛题解P1138第k小整数-洛谷|计算机科学教育新生态(luogu.com.cn)主要了解set的用法,set会自动去重和排序#include<bits/stdc++.h>usingnamespacestd;signedmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn,k;cin>>......
  • P1060 [NOIP2006 普及组] 开心的金明 题解
    思路01背包模版题,唯一不同的是加了一个条件就是价格与重要度的乘积。转移方程为:dp[j]=max(dp[j],dp[j-w[i]]+w[i]*v[i]);这里加了滚动数组优化。代码#include<bits/stdc++.h>#definelllonglong#defineldlongdoubleusingnamespacestd;inlinevoidread(int&x){......
  • 【大联盟】20230626 集查并(dsu) 题解 AT_toyota2023spring_final_g 【Git Gud】
    【大联盟】20230626集查并(dsu)题解AT_toyota2023spring_final_g【GitGud】zyx/bx题目描述here题解由于这场出了T2、验了T3(顺序是反的),所以赛时一直在想这个题,不过很遗憾不会。相当有意思的题。考虑合并两个点\(x,y\)时,对以后产生的贡献为\(\max\{f_x,f_y\}\),\(f_x......
  • JOI2013 JOIOI の塔 (Tower of JOIOI)题解
    Description给定一个由J、O、I组成的字符串,求最多能拆分成多少JOI或IOI。对于所有数据,\(1\leq\vertS\vert\leq10^6\)。Solution先处理出\(\text{pre}_i\)为前缀J和I的数量,即能组成多少个头部。然后倒着做,维护当前拼出的I、OI和最终成品的数量。遇到J、O就......
  • 【大联盟】20230703 T2 开心的序列(sequence) 题解 AT_agc049_f 【[AGC049F] Happy Sequ
    zak/bx恐怖zak将这题加强,出到模拟赛。直接把\(A_i,B_i\le10^5,C_i\le5\)变成了\(A_i,B_i,C_i\le10^9\)。非常恐怖。题目描述点击膜拜zhoukangyang。题解重新再理解一遍。我们维护\(p(x)=\sum_i|a_i-x|+|b_i-x|\),那么就相当于要求\(\forallx,p(x)\le0\),也就......
  • Luogu P4552 [Poetize6] IncDec Sequence 更好的题解
    原题链接第一步对于学过差分的人应该不难想定义差分数组$dis\quads.t.\quaddis[i]=a[i]-a[i-1]$那么不难发现问题一只要让\(dis[2]...dis[n]\)中全部为\(0\)即可区间\([l,r]\)加一操作在差分数组中意味着\(dis[l]=dis[l]+1,dis[r+1]=dis[r+1]-1\)即在差分数组......
  • 2023 暑假集训模拟赛题解
    目录CSP模拟1CSP模拟2FSYOCSP模拟1来自学长的馈赠2.CSP模拟2F考虑\(x\)只能在\(a_1\oplusb_i\)里选,那么分别代入暴力检验即可.时间复杂度\(\tilde\Theta(n^2)\),可以通过.S考虑交换同色的部分一定不优,所以同色字符的相对位置一定是不变的.那么操作序列......
  • 幽灵乐团 题解
    幽灵乐团题目大意\(T\)组数据,每组数据给定\(A,B,C\),求:\[\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\Big(\frac{\text{lcm}(i,j)}{\gcd(i,k)}\Big)^{f(type)}\bmodp\]其中,\(type\in\{0,1,2\}\),\(f(0)=1,f(1)=i\timesj\timesk,f(2)=\gcd(i,j,k)\)。思路分析神经污......