个人心得:数位dp处理起来是真的麻烦,本来动态规划就够头疼的了,菜的一批。

来看这个题目吧,题目在下面。

把题目变成可以求得就是求前n个数中1-n*9的情况的总和,所以用dp【i】【j】,表示前i个数中和为j的个数。

状态转移方程就是

dp[i][j]=dp[i-1][j-k]  0=<k<=9;

但是后面要注意前导为0的情况所以总和ans=(dp[i][j]-dp[i-1][j])*dp[i][j](后面N段不需要考虑前导为0的情况,前面前导为0的情况就是前n-1位中和为j的值)

脑瓜子还是不行呀!!!数位dp看了基本绕路走。。。。

1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码。
例如:99、1230、123312是幸运号码。
给出一个N,求长度为2N的幸运号码的数量。由于数量很大,输出数量 Mod 10^9 + 7的结果即可。
Input
输入N(1<= N <= 1000)
Output
输出幸运号码的数量 Mod 10^9 + 7
Input示例
1
Output示例
9
 #include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
const long long mod=;
long long dp[][];
int main()
{ memset(dp,,sizeof(dp));
dp[][]=;
int i,n;
cin>>n;
for(i=;i<;i++)
dp[][i]=;
for(i=;i<=n;i++)
for(int j=;j<=*i;j++){
for(int k=;k<=;k++)
{
if(j>=k)
dp[i][j]=(dp[i][j]+dp[i-][j-k])%mod;
}
}
long long ans=;
for(i=;i<=n*;i++)
ans=(ans+dp[n][i]*(dp[n][i]-dp[n-][i]))%mod;
cout<<ans<<endl;
return ;
}

最新文章

  1. Codeforces CF#628 Education 8 D. Magic Numbers
  2. OpenVPN使用用户名/密码验证方式
  3. excel 转换日期
  4. jquery属性选择器(同时匹配多个条件)
  5. Windows 10 L2TP 809错误
  6. SQL Server 2014 BI新特性(三)Power Query和Power Map功能预览
  7. tarjan求强联通分量 模板
  8. 软件工程个人作业4(课堂练习&amp;&amp;课堂作业)
  9. Android之进度条1
  10. leetcode 逆转字符串 当年的第一题,今天再写一遍,物是人非
  11. sulime-text 3 安装以及使用
  12. java图片缩放
  13. VC连接数据库方式
  14. Yet Another Multiple Problem(bfs好题)
  15. exists
  16. Java-8ATM
  17. free查看内存和swap使用情况,增加、删除、自动挂载swap分区
  18. chromdriver与geckodriver和浏览器版本问题
  19. 纯css3单选框/复选框美化样式代码
  20. day41 mysql详细操作

热门文章

  1. Ubuntu环境变量配置
  2. Linux sh远程连接失败 sshd.service启动失败
  3. Linux CentOS7安装Mysql5.7
  4. layer满屏/禁止最大化最小化 可以做选择框使用
  5. qt的登录设置(转)
  6. MYSQL数据库学习笔记1
  7. 【leetcode刷提笔记】Search Insert Position
  8. SQL性能调优策略
  9. JMeter学习(一)目录介绍
  10. oracle中检索结果汉字首字母排序详解