015 复杂的整数划分问题(超时)

#include
#include
#include
#include <string.h>
#define INF 0x3f3f3f;
using namespace std;

int n = 1,k;
int dp1[60][60][60];
int dp2[60][60];
int dp3[60][60];

struct node{
int a,b,c;
};
node ans[3600];
node ans2[3600];

int main() {
int y = 0;
while(n!=0&&cin>>n>>k){
int i,j,d;
memset(dp1,0,sizeof(dp1));
//生成第一个答案
//边界情况
for(i=0;i<=n;i++){
for(d=0;d<=k;d++){
if(i0&&d0){
dp1[i][0][d] = 1;
}else{
dp1[i][0][d] = 0;
}
}
}
//开始生成dp1
for(j=1;j<=n;j++){
for(i=0;i<=n;i++){
for(d=0;d<=k;d++){
int l;
for(l=0;l<=d&&lj<=i;l++){
dp1[i][j][d]+=dp1[i-l
j][j-1][d-l];
}
}
}
}

	//生成第二个答案 
	//边界情况
	dp2[0][0] = 1;
	for(i=1;i<=n;i++){
		dp2[i][0] = 0;
	}
	
	//开始生成dp2
	for(j=1;j<=n;j++){
		for(i=0;i<=n;i++){
			dp2[i][j] = dp2[i][j-1]+dp2[i-j][j-1];
		}
	} 
	
	
	//生成第三个答案
	//生成边界条件
	dp3[0][0] = 1;
	for(i=1;i<=n;i++){
		dp3[i][0] = 0;
	} 
	for(j=1;j<=n;j++){
		dp3[0][j] = 1;
	}
	//开始生成dp3
	for(j=1;j<=n;j++){
		for(i=1;i<=n;i++){
			if(j%2==0){
				dp3[i][j] = dp3[i][j-1];
			}else{
				int m;
				for(m=0;m*j<=i;m++){
					if(m==0){
						dp3[i][j] = dp3[i-m*j][j-1];
					}else{
						dp3[i][j]+=dp3[i-m*j][j-1];
					}
					
				}
			}
		}
	}

// for(j=0;j<=n;j++){
// for(i=0;i<=n;i++){
// cout<<dp3[i][j]<<" ";
// }
// cout<<endl;
// }
// cout<<dp1[n][n][k]<<endl;
// cout<<dp2[n][n]<<endl;
// cout<<dp3[n][n]<<endl;

	ans[y].a = dp1[n][n][k];
	ans[y].b = dp2[n][n];
	ans[y].c = dp3[n][n];
	y++;
//	for(j=0;j<=n;j++){
//		for(i=0;i<=n;i++){
//			for(d=0;d<=k;d++){
//				cout<<dp1[i][j][d]<<" ";
//			}
//			cout<<endl;
//		}
//		cout<<endl;
//		cout<<endl;
//	}

}
int b;
for(b=0;b<y-1;b++){
	cin>>ans2[b].a>>ans2[b].b>>ans2[b].c;
}
for(b=0;b<y;b++){
	cout<<ans[b].a<<" "<<ans[b].b<<" "<<ans[b].c<<endl;
	cout<<ans2[b].a<<" "<<ans2[b].b<<" "<<ans2[b].c<<endl;
}
		


return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值