題目傳送門:
這個題目乍一看像是個多重揹包問題,仔細一想還真是個多重揹包問題,只是沒有權值而已。這樣,我們的狀態就要改變了。
求什麼就設什麼
狀態:dp[i]表示已經組合好i個學分的組合數
刻畫子結構特徵:新的高學分的組合數都可以轉化為低學分的和。
舉個栗子:
目標4學分 2種學分種類
1學分 2門
2學分 2門
一共有兩種分法:1 1 2 和 2 2
在只有1學分 2門的情況下,只能湊成1學分 或者2學分的情況:
0
1
2
3
4
1
1
1
0
0
而在加上第二行的2學分 2門之後,就可以湊出3 4了。
0
1
2
3
4
1
1
2
1
2
可以看作在組合4個學分時,把4個學分分成了(1學分 2門的情況下已經組合好的 2學分 +剩下的2學分) 和 (1學分 2門的情況下已經組合好的 0學分 +剩下的4學分)
而剩下的學分可以在2學分 2門的情況下湊成,剩下的2學分由乙個2湊成,剩下的4學分可以由2 + 2湊成。
就可以得到:dp[4] = dp[2] + dp[0];
遞迴基:dp[0] = 1,其意義是已經組合好0學分的組合數,其應用場景是在當前n學分m門的情況下,如果可以直接在該階段湊出目標學分,
狀態轉移方程:dp[j] += dp[j-k*a];
#include #include #include #include using namespace std;
int f[100];
int main()
} } cout<} return 0;
}
HDU2079 選課時間
problem description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。xhd認為一樣學分的課沒區別 input 輸入資料的第一行是乙個資料t,表示有t組資料。每組資料的第一行是兩個整數n 1 n 40 k 1 k 8 ...
K 選課時間 HDU 2079
k 選課時間 hdu 2079 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。xhd認為一樣學分的課沒區別 input 輸入資料的第一行是乙個資料t,表示有t組資料。每組資料的第一行是兩個整數n 1 n 40 k 1 k 8 接著有k...
HDU 2079選課時間 (母函式)
其實思路是挺簡單的,直接母函式的模板套用即可,主要是粗心的緣故吧,少些了點東西,後來反覆built才弄好 include include include include include using namespace std 選課時間 問n個學分有多少種組合,認為學分一樣的課沒區別 input 輸入...