2023年8月1日发(作者:)
算法训练-⼊学考试-C语⾔实现(⾠⾠是个天资聪颖的孩⼦,他的梦想是成为世界上最伟⼤的医师。。。。问题描述⾠⾠是个天资聪颖的孩⼦,他的梦想是成为世界上最伟⼤的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了⼀个难题。医师把他带到⼀个到处都是草药的⼭洞⾥对他说:“孩⼦,这个⼭洞⾥有⼀些不同的草药,采每⼀株都需要⼀些时间,每⼀株也有它⾃⾝的价值。我会给你⼀段时间,在这段时间⾥,你可以采到⼀些草药。如果你是⼀个聪明的孩⼦,你应该可以让采到的草药的总价值最⼤。” 如果你是⾠⾠,你能完成这个任务吗?输⼊格式 第⼀⾏有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),⽤⼀个空格隔开,T代表总共能够⽤来采药的时间,M代表⼭洞⾥的草药的数⽬。接下来的M⾏每⾏包括两个在1到100之间(包括1和100)的整数,分别表⽰采摘某株草药的时间和这株草药的价值。输出格式 包括⼀⾏,这⼀⾏只包含⼀个整数,表⽰在规定的时间内,可以采到的草药的最⼤总价值。例⼦样例输⼊70 371 10069 11 2样例输出3思路经典01背包问题,求最⼤价值,动态规划,下⽂中定义的dp[i][j]代表的是当背包剩余容积为j,已经判定了i个物品时,背包的最优情况。代码呈上:#include
} printf("%d",dp[M][T]); return 0;}另⼀种写法:#include
{ dp[i][j]=dp[i-1][j]; } else //时间够,但是看这个草药是采还是不采,选择⼤的
{ dp[i][j]=(dp[i-1][j-t[i]]+s[i])>(dp[i-1][j])?(dp[i-1][j-t[i]]+s[i]):(dp[i-1][j]); } } } printf("%d",dp[M][T]);
return 0;
}
运⾏⽰例
2023年8月1日发(作者:)
算法训练-⼊学考试-C语⾔实现(⾠⾠是个天资聪颖的孩⼦,他的梦想是成为世界上最伟⼤的医师。。。。问题描述⾠⾠是个天资聪颖的孩⼦,他的梦想是成为世界上最伟⼤的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了⼀个难题。医师把他带到⼀个到处都是草药的⼭洞⾥对他说:“孩⼦,这个⼭洞⾥有⼀些不同的草药,采每⼀株都需要⼀些时间,每⼀株也有它⾃⾝的价值。我会给你⼀段时间,在这段时间⾥,你可以采到⼀些草药。如果你是⼀个聪明的孩⼦,你应该可以让采到的草药的总价值最⼤。” 如果你是⾠⾠,你能完成这个任务吗?输⼊格式 第⼀⾏有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),⽤⼀个空格隔开,T代表总共能够⽤来采药的时间,M代表⼭洞⾥的草药的数⽬。接下来的M⾏每⾏包括两个在1到100之间(包括1和100)的整数,分别表⽰采摘某株草药的时间和这株草药的价值。输出格式 包括⼀⾏,这⼀⾏只包含⼀个整数,表⽰在规定的时间内,可以采到的草药的最⼤总价值。例⼦样例输⼊70 371 10069 11 2样例输出3思路经典01背包问题,求最⼤价值,动态规划,下⽂中定义的dp[i][j]代表的是当背包剩余容积为j,已经判定了i个物品时,背包的最优情况。代码呈上:#include
} printf("%d",dp[M][T]); return 0;}另⼀种写法:#include
{ dp[i][j]=dp[i-1][j]; } else //时间够,但是看这个草药是采还是不采,选择⼤的
{ dp[i][j]=(dp[i-1][j-t[i]]+s[i])>(dp[i-1][j])?(dp[i-1][j-t[i]]+s[i]):(dp[i-1][j]); } } } printf("%d",dp[M][T]);
return 0;
}
运⾏⽰例
发布评论