ural1437

1437

记忆化 模拟倒水过程

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 256
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 bool dp[N][N][N];
18 bool o[1010];
19 int n,m,k;
20 void dfs(int i,int j,int g)
21 {
22     if(dp[i][j][g]) return ;
23     dp[i][j][g] = 1;
24     o[i] = 1,o[j] = 1,o[g] = 1;
25     o[i+j] = 1,o[j+g] = 1,o[i+g] = 1;
26     o[i+j+g] = 1;
27     dfs(n,j,g);dfs(i,m,g);dfs(i,j,k);
28     int ii = n-i,jj = m-j,gg = k-g;
29     if(j<=ii) dfs(i+j,0,g);
30     else dfs(n,j-ii,g);
31     if(g<=ii) dfs(i+g,j,0);
32     else dfs(n,j,g-ii);
33     if(i<=jj) dfs(0,i+j,g);
34     else dfs(i-jj,m,g);
35     if(g<=jj) dfs(i,j+g,0);
36     else dfs(i,m,g-jj);
37     if(i<=gg) dfs(0,j,i+g);
38     else dfs(i-gg,j,k);
39     if(j<=gg) dfs(i,0,j+g);
40     else dfs(i,j-gg,k);
41 }
42 int main()
43 {
44     int i,j,g;
45     while(cin>>n>>m>>k)
46     {//cout<<",";
47         memset(dp,0,sizeof(dp));
48         memset(o,0,sizeof(o));
49         dfs(0,0,0);
50 
51         int ans = 0;
52         for(i = 1 ; i <= n+m+k ; i++)
53         if(o[i]) ans++;
54         cout<<ans<<endl;
55     }
56     return 0;
57 }
View Code

 

转载于:https://www.cnblogs.com/shangyu/p/3630907.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值