HDU 5389.Zero Escape
2015-10-04 18:36
337 查看
1010.Zero Escape
一个数的数字根只和它mod~9mod 9之后的值有关,只要类似背包就能完成人员分配的计算。具体证明:数字根=\sum_{i=0}^{w}a_i∑i=0wai,数字=\sum_{i=0}^{w}10^i*a_i∑i=0w10i∗ai
数字-数字根=\sum_{i=0}^{w}(10^i-1)*a_i∑i=0w(10i−1)∗ai,这个数字在modmod 99域下为00
时间复杂度O(n)O(n)
#include<bits/stdc++.h> #define N 100010 #define LL long long #define MOD 258280327 using namespace std; int a ; int dp [10]; int main() { int T,n,A,B,sum; scanf("%d",&T); while(T--) { sum=0; scanf("%d%d%d",&n,&A,&B); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); sum=(sum+a[i])%9; if (sum==0) sum=9; } memset(dp,0,sizeof(dp)); dp[1][a[1]]=1; for (int i=2;i<=n;i++) for (int j=1;j<=9;j++) { if (j>a[i]) dp[i][j]=(dp[i-1][j]+dp[i-1][j-a[i]])%MOD; else { dp[i][j]=(dp[i-1][j]+dp[i-1][j+9-a[i]])%MOD; if (j==a[i]) dp[i][j]=(dp[i][j]+1)%MOD; } } LL ans=0; int tmp=(A+B)%9; if (tmp==0) tmp=9; if (tmp==sum) { ans=dp [A]; if (sum==A) ans--; } if (sum==A) ans=(ans+1)%MOD; if (sum==B) ans=(ans+1)%MOD; printf("%I64d\n",ans); } }
相关文章推荐
- 南阳oj_(39)水仙花数
- HDU 5387.Clockr
- 63. Unique Paths II (Graph; DP)
- 使用C3P0连接池释放当前连接
- viewWithTag 返回 nil , viewWithTag的值为nil的原因
- 初入栈学习(一)
- Tengine高性能部署之—日志分割
- Linux下安装jdk1.7经验(Ubunto14.04)
- sql语句之where与having的区别
- 62. Unique Paths (Graph; DP)
- UVA 10564 Paths through the Hourglass(背包)
- 创建一个数据库快照
- 64. Minimum Path Sum (Graph; DP)
- 基于Cocos2dx开发卡牌游戏_松开,这三个国家
- 杜甫草堂四首
- UI 过后的杂谈
- 关于ajax的同步和异步
- SpriteBuilder修改CCB文件中的子CCB文件需要注意的一个地方
- SpriteBuilder修改CCB文件中的子CCB文件需要注意的一个地方
- SpriteBuilder修改CCB文件中的子CCB文件需要注意的一个地方