0 pts 背包 dp 求调
查看原帖
0 pts 背包 dp 求调
688783
SilverLi楼主2023/6/1 15:15
#include <bits/stdc++.h>
using namespace std;
const int N=105;
int n,d;
int f[N][N];
struct node {int t,h,f;}a[N];
signed main() {
	cin>>d>>n;
	for(int i=1;i<=n;++i)   cin>>a[i].t>>a[i].f>>a[i].h;
	sort(a+1,a+n+1,[](node x,node y){return x.t<y.t;});
	memset(f,-1,sizeof(f));
	f[0][0]=10;
	for(int i=1;i<=n;++i) {
		for(int j=a[i].h;j<=d;++j) {
			if(j+a[i].h>=d&&
			f[i-1][j]>=a[i].t-a[i-1].t) {
				cout<<a[i].t;
				return 0;
			}
			f[i][j]=max(f[i-1][j]+a[i].f-(a[i].t-a[i-1].t),
			f[i-1][j-a[i].h]+(a[i].t-a[i-1].t));
		}
	}
	int ans=10;
	for(int i=1;i<=n;++i)
		ans=max(ans,f[i][0]+a[i].t);
	cout<<ans;
    return 0;
}
2023/6/1 15:15
加载中...