社区讨论

跪求大佬,巧方法。

P1156垃圾陷阱参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mi6h8ttv
此快照首次捕获于
2025/11/20 04:50
4 个月前
此快照最后确认于
2025/11/20 04:50
4 个月前
查看原帖
倒数第六行特意用2000(75分),用D的话只有45分。
CPP
#include<bits/stdc++.h>
using namespace std;
struct node{
    int Time,Height,Food;
}a[105];
int cmp(node a,node b){
    return a.Time<b.Time;
}
int D,n,m,dp[105][105];//dp里存寿命 
int main(){
    int i,j,k;
    cin>>D>>n;
    for(i=1;i<=n;i++){
        scanf("%d%d%d",&a[i].Time,&a[i].Food,&a[i].Height);
    }
    sort(a+1,a+n+1,cmp);
    dp[0][0]=10;
    for(i=1;i<=n;i++){
        for(j=0;j<=D;j++){
            if(dp[i-1][j]&&dp[i-1][j]>=a[i].Time){
                dp[i][j+a[i].Height]=max(dp[i][j+a[i].Height],dp[i-1][j]);
                dp[i][j]=max(dp[i][j],dp[i-1][j]+a[i].Food);
                if(j+a[i].Height>=D){
                    cout<<a[i].Time<<endl;
                    return 0;
                }
             }
        }
    }
    int ans=-1;
    for(i=0;i<=2000;i++){
        ans=max(dp[n][i],ans);
    } 
    cout<<ans<<endl;
    return 0;
}

回复

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

正在加载回复...