題解:顯然是一道dp,不妨設dp[i][j]表示數字i分成j個一共有幾種分法。
那麼轉移方程式為:
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]
表示將i - 1劃分為j個數,然後j個數都+1 還是不重複,將i - 1劃分為j - 1個數,然後j - 1個數都+1,再加上1這個數。
然後就是j的範圍要知道1+2+3+.....+n=i顯然(1+n)*n/2=i,所以j的範圍最多就是sqrt(i)。
#include #include #include #include #define mod 1000000007using namespace std;
const int m = 5e4 + 10;
int dp[m][400];
int main()
}int sum = 0;
for(int i = 1 ; i <= sqrt(2 * n) ; i++)
printf("%d\n" , (sum + mod) % mod);
return 0;
}
51nod 1201 整數劃分 dp
1201 整數劃分 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數...
整數劃分 51Nod 1201 (經典dp)
將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數量mod 10 9 7。sample input 6sample output 4這道題 剛寫的時候 使...
51Nod 1201 整數劃分 經典dp
題意不多說了。dp i j 表示i這個數劃分成j個數的情況數。dp i j dp i 1 j dp i 1 j 1 前者表示將i 1劃分為j個數,然後j個數都 1 還是不重複 後者表示將i 1劃分為j 1個數,然後j 1個數都 1,再加上1這個數 普通的dp是n 2的,但是可以發現1 2 m n 1...