社区讨论
求指导
P1064[NOIP 2006 提高组] 金明的预算方案参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi5hh1ai
- 此快照首次捕获于
- 2025/11/19 12:09 4 个月前
- 此快照最后确认于
- 2025/11/19 12:09 4 个月前
CPP
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=42000;
int n,m;
int t[maxn],p[maxn],q[maxn],t1[maxn],t2[maxn],p1[maxn],p2[maxn];
int f[maxn];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&t[i],&p[i],&q[i]);
if(q[i]!=0){
if(t1[q[i]]==0){
t1[q[i]]=t[i];
p1[q[i]]=p[i];
}
else{
t2[q[i]]=t[i];
p2[q[i]]=p[i];
}
}
}
for(int i=1;i<=m;i++){
for(int v=n;v>=t[i];v--){
if(q[i]==0){
if(v>=t[i]) f[v]=max(f[v],f[v-t[i]]+t[i]*p[i]);
if(v>=t[i]+t1[i]) f[v]=max(f[v],f[v-t[i]-t1[i]]+t[i]*p[i]+t1[i]*p1[i]);
if(v>=t[i]+t2[i]) f[v]=max(f[v],f[v-t[i]-t2[i]]+t[i]*p[i]+t2[i]*p2[i]);
if(v>=t[i]+t1[i]+t2[i]) f[v]=max(f[v],f[v-t[i]-t1[i]-t2[i]]+t[i]*p[i]+t1[i]*p1[i]+t2[i]*t2[i]);
}
}
}
printf("%d",f[n]);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...