Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <map>
- #define INF 1e9
- using namespace std;
- int main() {
- long long a,vol;
- cin>>a>>vol;
- bool o=0;
- long long x[a];
- long long y[a];
- long long z[a];
- map<long long,bool>m;
- long long f[a+1][vol+1];
- for(int k1=0;k1<a;k1++){
- cin>>x[k1];
- cin>>y[k1];
- cin>>z[k1];
- }
- long long maxd=INF;
- long long d=0;
- long long maxdi;
- bool b=0;
- for(int i=0;i<=a;i++){
- for(int j=0;j<=vol;j++){
- f[i][j] = INF;
- maxd = min(x[i-1],z[i-1]);
- maxd = min(maxd,y[i-1]);
- maxdi = -maxd;
- maxdi++;
- d=0;
- b=0;
- m.clear();
- if(i == 0 && j == 0){
- f[i][j] = 0;
- }
- else if(i == 0 || j == 0){
- f[i][j] = INF;
- }
- else{
- while(d >= maxdi && m[d] != 1){
- m[d] = 1;
- if(j == (x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d) && i == 1){
- f[i][j] = abs(d);
- break;
- }
- else if(j -((x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d)) >= 0){
- f[i][j] = min(f[i][j],abs(d)+f[i-1][j -((x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d))]);
- }
- else{
- f[i][j] = INF;
- }
- if(f[i][j] >=INF){
- f[i][j] = INF;
- }
- if(b == 0){
- d--;
- if(d <= maxdi - 1){
- b=1;
- d++;
- }
- }
- if(b == 1){
- d++;
- }
- }
- }
- }
- }
- if(f[a][vol] < INF){
- cout<<f[a][vol];
- }
- else{
- cout<<-1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement