TOJ:1746. How many sums
来源:互联网 发布:淘宝联盟部分退款返利 编辑:程序博客网 时间:2024/05/29 06:38
http://acm.tju.edu.cn/toj/showp1746.html
开始的时候没有想到会是大数,用了unsigned long long 然后就发现,数据范围不够,输出有负值,所以只能用数组处理,开始的时候用的是longlong 到100位了,后来才发现最多只有24位,8 * 4 就可以了。
#include <iostream>#include <cstring>#include <cstdio>#define Base 1e8#define MAXN 601using namespace std;int dp[MAXN][MAXN][4];void make(){memset(dp, 0, sizeof(dp));for (int i = 1; i <= 600; i++){dp[i][1][0] = 1;for (int j = 2; j <= 600; j++){if (i > j){for (int k = 0; k < 4; k++)dp[i][j][k] = dp[i][j - 1][k] + dp[i - j][j][k];}else if (i == j){for (int k = 0; k < 4; k++)dp[i][j][k] = dp[i][j - 1][k];dp[i][j][0]++;}else{for (int k = 0; k < 4; k++)dp[i][j][k] = dp[i][i][k];}for (int k = 0; k < 3; k++)if (dp[i][j][k] >= Base)dp[i][j][k] -= Base, dp[i][j][k + 1]++;}}}int main(){int n;make();while (cin >> n, n){int flag = 0;for (int i = 3; i >= 0; i--){if (dp[n][n][i]) flag++;if (flag == 1) cout << dp[n][n][i];else if (flag > 1) printf("%08d", dp[n][n][i]);}cout << endl;}}
0 0
- TOJ:1746. How many sums
- How many sums?
- toj1746How Many Sums
- How many
- How many zeros and how many digits?
- How many zeros and how many digits?
- how many java objects?
- How many的用法
- How many N
- How many different numbers
- How many fibs
- hdu1978 How many ways
- PKU2413 how many fibs
- How Many Fibs?
- How Many Tables
- HDOJ How Many Tables
- hdu 2609 How Many
- How many ways??
- ADO.NET学习笔记(五)
- 一个内存泄露的极端例子
- const setfill setw
- win8系统在安装软件时安装framework3.5失败的解决办法
- Android使用Fragment嵌套Fragment的方式实现界面滑动
- TOJ:1746. How many sums
- 牛津词典软件下载
- ADO.NET学习笔记(六)
- 什么是 “动态规划” , 用两个经典问题举例。
- 第一次接受打印出的发送方IP地址总是0.0.0.0;
- C++应用程序在Windows下的编译、链接:第一部分 概述
- C++中,cin和gets()的区别
- poj3414 Pots
- Matlab plot 参数设置