Qさんは、X曲の長さAの歌とY曲の長さBの歌があります.
2096 ワード
QさんはX曲の長さがAの歌とY曲の長さがBの歌があります.
2つの解法を紹介します.解法1(自牛客網IDを参考に牛です.私は牛です.私は牛です.コード(筆者が書いた解析付き):
01リュックの問題と見なす
解法2:
組み合わせ数で、C[i][j]=C[i-1][j-1]+C[i-1][j]はi個の中からj個を取って先にi個のaを取ることを表し、(0 a)/b<=yであることを証明する.×c[y][(k-ia)/b]種.
(組合せ数の計算は牛客網IDから阿道:C(n,k)=C(n−1,k)+C(n−1,k−1);楊輝三角:1 1 1 1 1 1 2 1 3 1 4 4 4 1)データが大きいため、テーマで説明した%1億007を除いて、筆者はlong long intを使ったが、そうでないと溢れ出すデータがある.
//以上の2つの方法はすべて牛客網のテストを通じて//本文章は筆者のオリジナルで、自分の学習過程を記録して分かち合って、転載して出典を明記してください
2つの解法を紹介します.解法1(自牛客網IDを参考に牛です.私は牛です.私は牛です.コード(筆者が書いた解析付き):
01リュックの問題と見なす
#include
using namespace std;
int B[201][1001]={0}; // B[i][j], j, 1-i
int w[201]; //w[i] : i
int main(){
int k,a,x,b,y,i,j;
while(cin>>k){
cin>>a>>x>>b>>y;
for(i=0;i<=x+y;i++){
B[i][0]=1; //B[i][0] 1, 0, 1 。
}
for(i=1;i<=x;i++){
w[i]=a;
}
for(i=x+1;i<=x+y;i++ ){
w[i]=b;
}
for(i=1;i<=x+y;i++){
for(j=1;j<=k;j++){
/* >= i ( %1000000007)
( i j )= ( i-1 j )+ ( i-1 j- p[i] )
( )
( i j )= ( i-1 j ) */
if(j>=w[i])
B[i][j]=(B[i-1][j-w[i]]%1000000007+B[i-1][j]%1000000007)%1000000007;
else
B[i][j]=B[i-1][j];
}
}
cout<
解法2:
組み合わせ数で、C[i][j]=C[i-1][j-1]+C[i-1][j]はi個の中からj個を取って先にi個のaを取ることを表し、(0 a)/b<=yであることを証明する.×c[y][(k-ia)/b]種.
(組合せ数の計算は牛客網IDから阿道:C(n,k)=C(n−1,k)+C(n−1,k−1);楊輝三角:1 1 1 1 1 1 2 1 3 1 4 4 4 1)データが大きいため、テーマで説明した%1億007を除いて、筆者はlong long intを使ったが、そうでないと溢れ出すデータがある.
#include
using namespace std;
int main(){
int k,a,x,b,y,i,j;
long long int count=0;
long long int c[101][101];
while(cin>>k){
cin>>a>>x>>b>>y;
c[0][0]=1;
for(i=1;i<=100;i++){
c[i][0]=1;
for(j=1;j<=100;j++){
c[i][j]=(c[i-1][j-1]+c[i-1][j])%1000000007;
}
}
for(i=0;i<=k/a&&i<=x;i++){
if((k-i*a)%b==0&&(k-i*a)/b<=y)
count=(count+(c[x][i]*c[y][(k-i*a)/b])%1000000007)%1000000007;
}
cout<
//以上の2つの方法はすべて牛客網のテストを通じて//本文章は筆者のオリジナルで、自分の学習過程を記録して分かち合って、転載して出典を明記してください