hdu 4112 Break the Chocolate
2011-11-11 17:25
302 查看
告诉一个n*m*k的长方体
用手扳:次数=(n-1)+(m-1)*n+(k-1)*n*m;//化简后居然是:n*m*k-1;
把一个n*m*k的方块先扳n-1次,得到n个小方块,再把它们每个扳m-1下,得到n*m个小方块,最后把它们每个扳k-1下,这样每个方块都是1*1*1的了。
用刀切:打表
用刀的时候,这道题其实就变成了这样一个问题:给你3条直线,要求把每条直线切成长度为1的小段,最少切多少刀?
长度 1 2 3 4 5 6 7 8 9 10
切的次数 0 1 2 2 3 3 3 3 4 4
不难发现 dp[i*2]=dp[i*2-1]=dp[i]+1;(可以画图体味下)
View Code
用手扳:次数=(n-1)+(m-1)*n+(k-1)*n*m;//化简后居然是:n*m*k-1;
把一个n*m*k的方块先扳n-1次,得到n个小方块,再把它们每个扳m-1下,得到n*m个小方块,最后把它们每个扳k-1下,这样每个方块都是1*1*1的了。
用刀切:打表
用刀的时候,这道题其实就变成了这样一个问题:给你3条直线,要求把每条直线切成长度为1的小段,最少切多少刀?
长度 1 2 3 4 5 6 7 8 9 10
切的次数 0 1 2 2 3 3 3 3 4 4
不难发现 dp[i*2]=dp[i*2-1]=dp[i]+1;(可以画图体味下)
View Code
#include <stdio.h> __int64 dp[3005],k,m,n; void init() { int i; dp[1]=0,dp[2]=1; for(i=2;i<=1005;i++) { dp[i*2]=dp[i*2-1]=dp[i]+1; } } int main() { int T,i,j=0; init(); scanf("%d",&T); while (T--) { scanf("%lld%lld%lld",&n,&m,&k); printf("Case #%d: ",++j); printf("%I64d",n-1+(m-1)*n+(k-1)*n*m); printf(" %I64d\n",dp +dp[m]+dp[k]); } return 0; }
相关文章推荐
- 学校1051 巧克力 ||HDU 4112 Break the Chocolate
- HDU - 4112 Break the Chocolate
- hdu 4112 Break the Chocolate(乱搞题)
- HDU-#4112 Break the Chocolate(规律)
- B - Break the Chocolate HDU - 4112
- HDU - 4112 Break the Chocolate
- hdu 4112 Break the Chocolate(ceil floor)
- HDU 4112 Break the Chocolate(简单的数学推导)
- hdu 4112 Break the Chocolate 贪心
- hdu 4112 Break the Chocolate(模拟)
- hdu-4112-Break the Chocolate
- hdu 4112 Break the Chocolate
- HDU 4112 Break the Chocolate(模拟)
- HDU 4112 Break the Chocolate
- hdu 4112 Break the Chocolate(数学函数)
- hdoj 4112 Break the Chocolate
- hdoj Break the Chocolate 4112 (数学规律题)
- hdu 4112 Break the Chocolate(水题)
- hdu4112: Break the Chocolate
- Break the Chocolate(推论题)