社区讨论

求指导

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 条回复,欢迎继续交流。

正在加载回复...