ural 1353. Milliard Vasya's Function(dp)
2014-10-14 23:53
369 查看
题意:
给一个数s,求1~10亿这10亿个数中,各个位上的数之和为s的数的个数
分析:
dp[i][j]表示前i位,各个位上的数之和为j的个数
最后答案即为dp[9][j],还有一个例外需要考虑,当s==1时,要多加一个;
由于10亿是10位,先算出9位上的符合条件的dp[9][s],然后再单独考虑10位的情况
即:当s==1时,答案为dp[9][s]+1;其余情况都为dp[9][s];
转移方程:
dp[i][j]=dp[i-1][j]+dp[i-1][j-1]+...+dp[i-1][j-9];一直加到j-9或是j减到0
统计之前的和为j的个数
给一个数s,求1~10亿这10亿个数中,各个位上的数之和为s的数的个数
分析:
dp[i][j]表示前i位,各个位上的数之和为j的个数
最后答案即为dp[9][j],还有一个例外需要考虑,当s==1时,要多加一个;
由于10亿是10位,先算出9位上的符合条件的dp[9][s],然后再单独考虑10位的情况
即:当s==1时,答案为dp[9][s]+1;其余情况都为dp[9][s];
转移方程:
dp[i][j]=dp[i-1][j]+dp[i-1][j-1]+...+dp[i-1][j-9];一直加到j-9或是j减到0
统计之前的和为j的个数
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <map> #include <limits.h> using namespace std; typedef long long ll; ll dp[15][100]; int main() { int s; while(~scanf("%d",&s)) { memset(dp,0,sizeof(dp)); for(int i=0;i<=9;++i) { dp[1][i]=1; dp[i][0]=1; } for(int j,i=2;i<=10;++i) { for(j=1;j<=s;++j) { for(int k=j;k>=0&&k>=j-9;--k) dp[i][j]+=dp[i-1][k]; //printf("dp[%d][%d]=%I64d ",i,j,dp[i][j]); } // printf("\n"); } if(s==1) dp[9][s]++; printf("%I64d\n",dp[9][s]); } return 0; }
相关文章推荐
- Ural 1353 Milliard Vasya's Function(DP)
- Milliard Vasya's Function(Ural_1353)
- URAL 1353 Milliard Vasya's Function(DP)
- ural 1353. Milliard Vasya's Function
- Ural 1353. Milliard Vasya's Function 暴搜
- URAL 1353 Milliard Vasya's Function(DP)
- ural 1353. Milliard Vasya's Function
- Ural 1353 Milliard Vasya's Function(DP)
- URAL 1353. Milliard Vasya's Function(dp)
- Ural1353-Milliard Vasya's Function
- ural 1353. Milliard Vasya's Function
- 递推DP URAL 1353 Milliard Vasya's Function
- Timus 1353. Milliard Vasya's Function
- URAL 1353 Milliard Vasya's Function dp练习
- URAL1353——DP——Milliard Vasya's Function
- URAL 1353 Milliard Vasya's Function(DP)
- HOJ 10444 The milliard Vasya's function(简单背包)
- Ural 1353 Milliard Vasya's Function
- Milliard Vasya's Function
- Milliard Vasya's Function-Ural1353动态规划