/*有1克、2克、3克、4克、...n克的砝码各一枚,请问能称出哪几种重量?每种重量各有几种可能的组合方案?(不考虑砝码相减的情况)*/
/*如有1克与2克砝码各一枚,那么可称出3种重量,每种重量的组合方案个数为{1,1},{2,1},{3,1} */
/*实现函数:void fun(int* array, int length) */
/*示例: */
/* -输入:{1,2},2 输出: 3,{1,1},{2,1},{3,1} */
/* -输出: {1,2,3},3 输出: 6,{1,1},{2,1},{3,2},{4,1},{5,1},{6,1} */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 102
int main(int argc, char *argv[])
{
int n;
int i, j,k;
int dp[(MAX + 1)*MAX / 2][MAX];
memset(dp,0,sizeof(dp));
scanf("%d", &n);
/*dp的初始化*/
for (k = 0; k <= n; k++)
dp[0][k] = 1;
/*i表示称出的重量 , j表示某一时刻的n , dp[i][j]代表方案种类*/
for (j = 1; j <= n; j++)
for (i = 1; i <= (j + 1)*j / 2; i++)
{
if (i < j)
dp[i][j] = dp[i][j - 1];
else
dp[i][j] = dp[i][j - 1] + dp[i-j][j-1];
}
for (i = 1; i <= (n + 1)*n / 2; i++)
printf("(%d %d)\t",i,dp[i][n]);
return 0;
}
动态规划:砝码的组合方案(2018届校招C/C++软件开发工程师)
最新推荐文章于 2022-03-24 19:25:06 发布