题目链接:

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. 一道关于js正则表达式的面试题

    这道面试题明显是要用到正则表达式来解决的,由于太久没有写正则表达式了,一时之间竟然写不出来,所以记录一下笔记,下面直接上代码: function parseUrl(str) { // 判断是否传入参数 ...

  2. memcache类的扩展函数

    Memcache — Memcache类 /****连接****/1.Memcache::connect – 创建一个Memcache对象语法:bool Memcache::connect ( str ...

  3. FireDAC的SQLite初探

    // uses FireDAC.VCLUI.Wait  之后, 可不用添加 TFDGUIxWaitCursor TFDConnection          // 数据连接 TFDQuery      ...

  4. Oracle之单表查询及常用函数

    1.语法: select 字段列表 from 表名 [where 查询条件] [group by 分组] [having 分组条件] [order by 排序] select * 代表查询所有的字段 ...

  5. VMWARE虚拟机中CentOs7网络连接

    1.选择网络连接模式 这里选择NAT模式 2.查看虚拟机逻辑地址段 编辑---->虚拟网络编辑器 这里显示的是192.168.40.0 我们本机占用了192.168.40.1,网关是192.16 ...

  6. Apache Flume简介及安装部署

    概述 Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的软件. Flume 的核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目 ...

  7. python中字符串的常见操作

    demo:mystr = 'hello python' 1.find:mystr.find(str, start=0, end=len(mystr)),检测字符串中是否有要查询的字符,如果有返回开始的 ...

  8. Simple, Poetic, Pithy

    源自:Rob Pike points out Simple, Poetic, Pithy Don't communicate by sharing memory, share memory by co ...

  9. [HDU6326]Monster Hunter(贪心)

    用(a,b)表示一个点先失去a点HP,然后增加b点HP 首先容易证明忽略父亲条件下,任意两个点,先吃b大的最优 对于一个节点v和它的父节点u,若此时选v最优,那么就是吃到u时可以立即吃掉v, 于是可以 ...

  10. 日期插件Mobiscroll

    http://mobiscroll.com/ http://www.cnblogs.com/hxling/archive/2012/12/12/2814207.html http://www.wglo ...