社区讨论

有二进制优化最后两个点还是WA了

P1833樱花参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi86bdqg
此快照首次捕获于
2025/11/21 09:20
4 个月前
此快照最后确认于
2025/11/21 09:20
4 个月前
查看原帖
CPP
#include<cstdio>
#include<iostream>
#include<cstring>
#include<stdlib.h>
#define MAXN 10010//experiment 2 demensions char matrix
using namespace std;
int w[MAXN],v[MAXN],p[MAXN],dp[1010],ncnt;
int main(){
	int h1,h2,m1,m2,n;
	scanf("%d:%d %d:%d %d",&h1,&m1,&h2,&m2,&n);
	int m=abs(h1*60+m1-h2*60-m2);
	//cout<<m;
	int wn,vn,pn;
	for(int i=1;i<=n;i++){

		scanf("%d%d%d",&wn,&vn,&pn);
		if(!pn || pn==1){	
			++ncnt;
			w[ncnt]=wn;
			v[ncnt]=vn;
			p[ncnt]=pn;	
		}
		else{
			int c=pn;
			for(int j=1;j<=c;j*=2){
				++ncnt;
				w[ncnt]=wn*j;
				v[ncnt]=vn*j;
				p[ncnt]=1;
				c-=j;
			}
			if(c>0){
				ncnt++;
				w[ncnt]=wn*c;
				v[ncnt]=vn*c;
				p[ncnt]=1;
			}	
		}
	}
	for(int i=1;i<=ncnt;i++){
		if(p[i]==0){
			for(int j=w[i];j<=m;j++){
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}
		else{
			for(int j=m;j>=w[i];j--){
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}
	}
	cout<<dp[m];
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...