80分wa最后一个点求助

P1759 通天之潜水

``` #include <iostream> using namespace std; int N,M,V; bool road[105][205][205]; int f[105][205][205]; int m[105]; int v[105]; int t[105]; void print(int n1,int m2,int v2){ if(n1 == 1){ if(road[n1][m2][v2]) cout << 1 << " "; return; } if(road[n1][m2][v2]) print(n1 - 1,m2 - m[n1],v2 - v[n1]); else print(n1 - 1,m2,v2); if(road[n1][m2][v2]) cout << n1 << " "; return; } int dfs(int n,int m1,int v1){ if(f[n][m1][v1]) return f[n][m1][v1]; if(n == 0) return 0; if(m1 >= m[n] && v1 >= v[n]){ int x = dfs(n - 1,m1,v1); int y = dfs(n - 1,m1 - m[n],v1 - v[n]) + t[n]; if(y > x) road[n][m1][v1] = 1; return f[n][m1][v1] = max(x,y); } else return f[n][m1][v1] = dfs(n - 1,m1,v1); } int main(){ cin >> M >> V >> N; for(int i = 1;i <= N;i++) cin >> m[i] >> v[i] >> t[i]; cout << dfs(N,M,V) << endl; print(N,M,V); return 0; }
by LYM20114 @ 2022-08-23 12:21:45


|