题目链接:

http://acm.hust.edu.cn/vjudge/problem/113727

Restaurant Ratings

Time Limit: 3000MS

题意

给你一个长度为n,由非负整数组成的和为sum的序列。求长度为也为n,且和比sum小的或者和等于sum并且字典序小于所给序列的所有不同的序列。

题解

数位dp。

dp[i][j]表示序列长度为i时和为j的所有不同序列数。 sumv[i][j]表示长度为i并且和小于等于j的所有不同序列数。

代码

#include<map>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++) typedef long long LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8; //start---------------------------------------------------------------------- LL dp[22][33],sumv[22][33]; void pre(){
clr(dp,0);
dp[0][0]=1;
rep(i,1,22){
rep(j,0,33){
rep(k,0,j+1){
dp[i][j]+=dp[i-1][j-k];
}
if(j==0) sumv[i][j]=dp[i][j];
else sumv[i][j]=sumv[i][j-1]+dp[i][j];
}
}
} int arr[22]; int main() {
pre();
int n;
while(scanf("%d",&n)==1&&n){
int sum[22];
sum[0]=0;
rep(i,1,n+1){
scanf("%d",&arr[i]);
sum[i]=sum[i-1]+arr[i];
}
LL ans=0;
if(sum[n]-1>=0) ans=sumv[n][sum[n]-1];
rep(i,1,n+1){
rep(j,0,arr[i]){
ans+=dp[n-i][sum[n]-sum[i-1]-j];
}
}
ans++;
printf("%lld\n",ans);
}
return 0;
} //end-----------------------------------------------------------------------

UVALive - 6872 Restaurant Ratings 数位dp的更多相关文章

  1. UVALive 4877 Non-Decreasing Digits 数位DP

    4877 Non-Decreasing Digits A number is said to be made up ofnon-decreasing digitsif all the digits t ...

  2. UVALive - 6575 Odd and Even Zeroes 数位dp+找规律

    题目链接: http://acm.hust.edu.cn/vjudge/problem/48419 Odd and Even Zeroes Time Limit: 3000MS 问题描述 In mat ...

  3. CSUOJ 1635 Restaurant Ratings

    1635: Restaurant Ratings Time Limit: 1 Sec  Memory Limit: 128 MB Description A famous travel web sit ...

  4. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  5. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  6. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  7. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  9. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

随机推荐

  1. jquery的JSON字符串处理、单引号双引号的转换

    1.jquery的JSON字符串处理 var pwdlevel_val = "{"minLength":1,"maxLength":20," ...

  2. 【读书笔记 - Effective Java】03. 用私有构造器或者枚举类型强化Singleton属性

    实现Singleton(代表本质上唯一的系统组件)的三种方法: 1. 保持私有构造器,导出公有的静态成员,客户端访问该类的唯一实例. 2. 保持私有构造器,公有的成员是静态工厂方法. 3. 单元素的枚 ...

  3. 浅谈vue,小程序,react基础绑定值

    最近一直在用react开发项目,碰见的问题千千万,很多,但是都殊途同源,唯一区别大的就是没有像vue的双向绑定,也没有小程序的单向方便,比如: vue   v-modal="msg" ...

  4. javascript 时间倒计时效果

    <div id="divdown1"></div> <script language="javascript" type=&quo ...

  5. (七)json序列化

    在spring boot项目中已经包含有json序列化的框架,具体在包com.fasterxml.jackson.annotation中,建议看看详细源码. 但在项目应用上还是会有一些坑会出现的,举个 ...

  6. 【Hbase三】Java,python操作Hbase

    Java,python操作Hbase 操作Hbase python操作Hbase 安装Thrift之前所需准备 安装Thrift 产生针对Python的Hbase的API 启动Thrift服务 执行p ...

  7. python学习——常用模块

    在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...

  8. 解决sublime 的 package control 问题here are no packages available for installation

    参考https://blog.csdn.net/zknxx/article/details/52685094 关于 channel_v3.json 文件 ,下载的压缩包里没有, 需要下载https:/ ...

  9. 屏蔽Drupal中的“Notice: Undefined index”警告

    原因:drupal默认使用E_ALL,即输出所有错误和警告.我们只需要修改错误显示级别即可. 方法: 1. 打开\sites\default\settings.php 追加一行 ini_set('er ...

  10. steam账号分享工具、迅游账号分享工具说明:

    steam账号分享工具.迅游账号分享工具说明: 用于网吧经营者将自己购买的迅游加速器账号或者是steam平台账号免费分享给有需要的网吧顾客使用. steam账号分享工具.迅游账号分享工具由“服务端”和 ...