मैं एसपीओजे (link) से किसी समस्या को हल करने का प्रयास कर रहा हूं, जिसे संक्षेप में इस प्रकार वर्णित किया जा सकता है: एन अंतराल को देखते हुए, प्रत्येक पूर्णांक शुरुआत और अंत के साथ, और अधिकतम समय के साथ अंत दिया जाता है (चलिए इसे max_end कहते हैं), आप कितने तरीकों से अंतराल का एक सेट चुन सकते हैं जो 1 को कवर करता है ... max_end। अंतराल ओवरलैप हो सकता है। मैंने एक डीपी की कोशिश की; अंत समय से पहले क्रमबद्ध करें, फिर डीपी [i] एक जोड़ी है, जहां डीपी [i]। सबसे पहले अंतराल की न्यूनतम संख्या 1 को कवर करने के लिए आवश्यक है ... अंत [i] अंतराल I और डीपी [i] .second यह करने के तरीकों की संख्या है। यहां मेरा मुख्य डीपी लूप है:डीपी समस्या में सहायता
for(int i = 1; i < n; i ++) {
for(int j = 0; j < i; j ++) {
if(! (x[ j ].end >= x[ i ].start - 1))
continue;
if(dp[ j ].first + 1 < dp[ i ].first) {
dp[ i ].first = dp[ j ].first + 1;
dp[ i ].second = dp[ j ].second;
}
else if(dp[ j ].first + 1 == dp[ i ].first) {
dp[ i ].second += dp[ j ].second;
}
}
}
दुर्भाग्यवश, यह काम नहीं किया। क्या कोई मुझे बता सकता है कि मुझे गलती कहाँ है? अग्रिम में धन्यवाद! :)
डीपी [0] के लिए आपके शुरुआती मूल्य क्या हैं? साथ ही, जुड़ा हुआ प्रश्न विशेष रूप से ** न्यूनतम ** अंतराल के सेट के लिए पूछता है जो किसी विशेष दिन को कवर करता है; क्या आप वाकई यह एल्गोरिदम गारंटी देते हैं? – templatetypedef
हाय, मैं डीपी [0] शुरू करता हूं। फर्स्ट = डीपी [0] .second = 1 अगर शुरू होता है [0] = 1. और मुझे लगता है कि मेरा एल्गोरिदम इसकी गारंटी देता है। अगर आपके दिमाग में कोई समाधान है तो मैं इसकी सराहना करता हूं :) – Chris
क्या आप यहां अपने अंतर्ज्ञान पर विस्तार कर सकते हैं? मैं आपका कोड क्यों काम करता हूं इसका पालन नहीं कर सकता। – templatetypedef