也是经典的计数DP题,想练练手,故意不写记忆化搜索,改成递推,还是成功了嘞。。。不过很遗憾一开始WA了,原来是因为判断结束条件写个 n或s为0,应该要一起为0的,搞的我以为自己递推写挫了,又改了一下,其实递推没问题,就是写出来不好看

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
const int N=80;
LL dp[N][N][1000];
int mat[N][N];
int p[N][N][1000];
int n,s;
void print(int d,int loc,int s)
{if (d==2*n-1) return;int val=mat[d][loc];if (d<n){if (dp[d+1][loc-1][s-val] && loc>1){putchar('L');print(d+1,loc-1,s-val);return;}else {putchar('R');print(d+1,loc,s-val);}}else{if (dp[d+1][loc][s-val]){putchar('L');print(d+1,loc,s-mat[d][loc]);return;}else{putchar('R');print(d+1,loc+1,s-mat[d][loc]);}}
}
int main()
{while (scanf("%d%d",&n,&s)!=EOF){if (n==0 &&s==0) break;memset(mat,0,sizeof mat);for (int i=1;i<=2*n-1;i++){int k;if (i<=n) k=n-i+1;else k=i-n+1;for (int j=1;j<=k;j++){scanf("%d",&mat[i][j]);}}memset(dp,0,sizeof dp);for (int i=1;i<=n;i++){dp[2*n-1][i][mat[2*n-1][i]]=1;}for (int i=2*n-2;i>=1;i--){int k;if (i>=n) k=i-n+1;else k=n-i+1;if (i>=n){for (int j=1;j<=k;j++){for (int q=mat[i][j];q<=s;q++){dp[i][j][q]+=dp[i+1][j][q-mat[i][j]];dp[i][j][q]+=dp[i+1][j+1][q-mat[i][j]];}}}else{for (int j=1;j<=k;j++){for (int q=mat[i][j];q<=s;q++){dp[i][j][q]+=dp[i+1][j][q-mat[i][j]];dp[i][j][q]+=dp[i+1][j-1][q-mat[i][j]];}}}}LL ans=0;int loc=-1;for (int i=1;i<=n;i++){ans+=dp[1][i][s];if (dp[1][i][s] && loc==-1){loc=i;}}printf("%lld\n",ans);if (ans>0){printf("%d ",loc-1);print(1,loc,s);}puts("");}return 0;
}

  

转载于:https://www.cnblogs.com/kkrisen/p/3902760.html

UVA 10564 计数DP相关推荐

  1. Sumsets POJ - 2229(计数dp)

    题意: 给一个数,是集合的总数和,集合元素只能为2的次幂数,问这样的集合有多少? 题目: Farmer John commanded his cows to search for different ...

  2. CSPS 2019 Day2 T1 Emiya 家今天的饭(容斥 + 计数 dp)

    Description 给定一个 n×mn \times mn×m 的矩阵,每一行最多选一个数,每一列可以选若干个数,但是每一列选的数不能超总数的一半.求有多少个不同的方案数. Solution 容斥 ...

  3. dp2:线性dp、区间dp、计数dp.

    线性dp   动态规划时间复杂度分析,状态数目与状态转移次数相乘. 数字三角形 数字三角形 以集合的观点考虑dp问题. #include<iostream> #include<cst ...

  4. UVA 10564 - Paths through the Hourglass (dp)

    本文出自   http://blog.csdn.net/shuangde800 题目传送门 题意: 给一个相上面的图.要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum. 问有多少 ...

  5. 组合计数 ---- Codeforces 737C Div2 C. Moamen and XOR [多阶段决策计数dp]

    题目链接 题目大意: 有nnn个数.每次数范围是[0,2k]∣k∈[0,3e5][0,2^k]|k\in[0,3e5][0,2k]∣k∈[0,3e5] 问你有多少种情况这nnn个数的与大于等于异或 首 ...

  6. [luogu4133 BJOI2012] 最多的方案 (计数dp)

    题目描述 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的 ...

  7. Placing Lampposts ,UVa 10859 树形dp

    UVa 10859 日常刷白书,第三次刷dp刷到这题,竟然还是不会写..... 这个题给定n个点m条边的无向无环图,有至多1000个节点,每个节点有两个状态,可以放灯或者不放灯,要求放最少的灯使得所有 ...

  8. uva 10118(DP)

    UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己 ...

  9. uva 672 - Gangsters(dp)

    题目链接:uva 672 - Gangsters 题目大意:给出n,K,T,表示一个酒店将要有n位客人到来,然后给出每个客人的ti,表示在ti时刻第i位客人来到酒店,ti ≤ T:再给出pi,表示第i ...

最新文章

  1. 中国地址住址五级以下
  2. 【错误记录】Android Studio 编译报错 ( VirtualApp 编译 NDK 报错 | Error:A problem occurred configuring project ‘: )
  3. JavaScript 事件入门知识
  4. C指针原理(31)-Ncurses-文本终端的图形
  5. 51 Nod 1116 K进制下的大数
  6. python hashlib_python hashlib模块及md5() 、sha()
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的科研项目评审系统
  8. 办公室海王小姐姐悄悄问我如何在PC端登录多个微信小号?
  9. 其他手机安装鸿蒙系统,不是华为手机,也能用上鸿蒙系统
  10. 实验2-1-1 计算摄氏温度 (5 分)
  11. C4D结合AE制作酷炫MG光影动画心得
  12. 折线图x轴的日期会超出_折线图技巧丨阈限颜色设置
  13. 各级政府发布的BIM标准指南37套免费下载
  14. mysql binlog常用操作
  15. 一名「数据分析师」职业思考与规划
  16. reactinput聚焦事件_React中的事件
  17. Android产品研发(十一)--应用内跳转Scheme协议
  18. 最新2018.1.1深度学习平台搭建 Win10+GPU+Tensorflow+keras+CUDA --2018.1.1
  19. powerpoint预览_如何添加,删除和重新排列PowerPoint幻灯片
  20. JS 单引号、双引号与反引号的区别

热门文章

  1. BI推荐8款优秀的app
  2. Linux web服务器初始化设置
  3. OSPF 形成邻居 关系的条件
  4. 网络学习(二十七)Windows XP 加入 Windows Server 2003 Active Directory
  5. freeBSD时区设置与时间设置
  6. discrete mathematics important questions
  7. 有事情不能第一时间给父母说
  8. 算法笔记 1 31 chapter4
  9. #region 常量和静态变量静态类readonly
  10. Flutter ListView封装,下拉刷新、上拉加载更多