UVA 10564 计数DP
也是经典的计数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相关推荐
- Sumsets POJ - 2229(计数dp)
题意: 给一个数,是集合的总数和,集合元素只能为2的次幂数,问这样的集合有多少? 题目: Farmer John commanded his cows to search for different ...
- CSPS 2019 Day2 T1 Emiya 家今天的饭(容斥 + 计数 dp)
Description 给定一个 n×mn \times mn×m 的矩阵,每一行最多选一个数,每一列可以选若干个数,但是每一列选的数不能超总数的一半.求有多少个不同的方案数. Solution 容斥 ...
- dp2:线性dp、区间dp、计数dp.
线性dp 动态规划时间复杂度分析,状态数目与状态转移次数相乘. 数字三角形 数字三角形 以集合的观点考虑dp问题. #include<iostream> #include<cst ...
- UVA 10564 - Paths through the Hourglass (dp)
本文出自 http://blog.csdn.net/shuangde800 题目传送门 题意: 给一个相上面的图.要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum. 问有多少 ...
- 组合计数 ---- 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个数的与大于等于异或 首 ...
- [luogu4133 BJOI2012] 最多的方案 (计数dp)
题目描述 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的 ...
- Placing Lampposts ,UVa 10859 树形dp
UVa 10859 日常刷白书,第三次刷dp刷到这题,竟然还是不会写..... 这个题给定n个点m条边的无向无环图,有至多1000个节点,每个节点有两个状态,可以放灯或者不放灯,要求放最少的灯使得所有 ...
- uva 10118(DP)
UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己 ...
- uva 672 - Gangsters(dp)
题目链接:uva 672 - Gangsters 题目大意:给出n,K,T,表示一个酒店将要有n位客人到来,然后给出每个客人的ti,表示在ti时刻第i位客人来到酒店,ti ≤ T:再给出pi,表示第i ...
最新文章
- 中国地址住址五级以下
- 【错误记录】Android Studio 编译报错 ( VirtualApp 编译 NDK 报错 | Error:A problem occurred configuring project ‘: )
- JavaScript 事件入门知识
- C指针原理(31)-Ncurses-文本终端的图形
- 51 Nod 1116 K进制下的大数
- python hashlib_python hashlib模块及md5() 、sha()
- 基于JAVA+SpringBoot+Mybatis+MYSQL的科研项目评审系统
- 办公室海王小姐姐悄悄问我如何在PC端登录多个微信小号?
- 其他手机安装鸿蒙系统,不是华为手机,也能用上鸿蒙系统
- 实验2-1-1 计算摄氏温度 (5 分)
- C4D结合AE制作酷炫MG光影动画心得
- 折线图x轴的日期会超出_折线图技巧丨阈限颜色设置
- 各级政府发布的BIM标准指南37套免费下载
- mysql binlog常用操作
- 一名「数据分析师」职业思考与规划
- reactinput聚焦事件_React中的事件
- Android产品研发(十一)--应用内跳转Scheme协议
- 最新2018.1.1深度学习平台搭建 Win10+GPU+Tensorflow+keras+CUDA --2018.1.1
- powerpoint预览_如何添加,删除和重新排列PowerPoint幻灯片
- JS 单引号、双引号与反引号的区别