社区讨论
跪求大佬,巧方法。
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 条回复,欢迎继续交流。
正在加载回复...