POJ 1037 DP
题目链接: http://poj.org/problem?id=1037
分析: 很有分量的一道DP题!!!
(参考于:http://blog.csdn.net/sj13051180/article/details/6669737 )
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip>
using namespace std;long long up[25][25];
long long down[25][25];
long long ans[25];void getfirst(long long n,long long c,bool u){if(n==0) return ;long long sum=0,t;if(!u) { //前一步是up,当前步要downt=ans[n+1];while(sum+down[n][t]<c)sum+=down[n][t++];} else { //前一步是down,当前步要upt=1;while(sum+up[n][t]<c)sum+=up[n][t++];}ans[n]=t; //定位getfirst(n-1,c-sum,!u); //搜索下一位for(int i=1;i<n;++i)if(ans[i]>=t) ++ans[i];
}void Init(){up[1][1]=down[1][1]=1;for(int i=2; i<=20; ++i)for(int j=1; j<=i; ++j) {up[i][j]=down[i][j]=0;for(int k=j; k<=i-1; ++k)up[i][j]+=down[i-1][k];for(int k=1; k<=j-1; ++k)down[i][j]+=up[i-1][k];}
}
int main(){Init();int T; scanf("%d",&T);while(T--){long long c,n;scanf("%lld%lld",&n,&c); long long sum=0,t=1;while(sum+up[n][t]+down[n][t]<c){sum+=up[n][t]+down[n][t];++t;}ans[n]=t; //定位首位//搜索下一位if(sum+down[n][t]<c) //在up中getfirst(n-1,c-sum-down[n][t],false);else //在down中 getfirst(n-1,c-sum,true);for(int i=1;i<n;++i)// 比如当n=5时, 第一个选了t=3, 还有1,2,4,5 后面会对应到1,2,3,4, 大于t的都相对-1, 最终要+1 if(ans[i]>=t) ++ans[i];printf("%lld",ans[n]);for(int i=n-1;i>=1;--i)printf(" %lld",ans[i]);puts("");}return 0;
}
POJ 1037 DP相关推荐
- POJ 3017 DP + 单调队列 + 堆
题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...
- POJ 1159 (DP)
题目:http://poj.org/problem?id=1159 思路: 找出原串的最长回文子串,当然这里说的回文子串可以不连续.用原串的长度减去最长回文子串的长度即可得出结果. 设原串a[5001 ...
- POJ 1661 DP
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11071 Accepted: 3607 Descr ...
- POJ 3666 dp
题意 传送门 POJ 3666 基本思路是对 N 个位置枚举所有可能高度,并 dp 求最大值.可能高度取 N 个位置的高度即可,排序以方便顺序 dp.对于升序的情况 dp[i][j]=max{dp[i ...
- POJ 3666(DP)
题目链接:http://poj.org/problem?id=3666 题目大意:给一个串,要求修改最少使得串满足非递增或非递减 题目思路:刚开始没想到,后来经学长提醒如果串里的数字变1000可以怎么 ...
- POJ 3257 DP
题意: 思路: 用vector存上本出发点能到的地方&成本&有趣指数(用结构体保存) 然后DP就好了 f[i][j]表示到了i 成本为j的有趣指数最大是多少 f[vec[i][k].e ...
- poj 2392 dp 不是很懂哎!!!Space Elevator
大意:有K种block去建塔,每种每个都有一个高度H,用了当前的block塔的高度不能超出a,和每种的数量.求塔最高能建多高. 分析:这题就是一个多重背包,但有一点变动,必须先以a从小到大排序,因为如 ...
- poj 2346(DP)
题意:n位数,满足前n/2个数字之和同后n/2个数字之和相同的数一共有多少个? 解题思路:dp[i][j]表示前i个数的和为j时,有多少个: 递推关系:dp[i][j] += dp[i-1][k ...
- POJ 2353 DP
双向DP+记录路径. // by SiriusRen #include <stack> #include <cstdio> #include <cstring> u ...
最新文章
- 游戏脚本和MonoBehaviour生命周期
- 这份门禁系统培训PPT也太全面了,门禁系统知识,看这一篇就够了
- 总体经济拉动新引擎-农业大健康·张咏:疫情后谋定乡村振兴
- contains java_Java CopyOnWriteArraySet contains()用法及代码示例
- FreeEIM 是班级的学习委员
- 【Kafka】kafka console received unknown topic or partition error listOffset request
- 2021鞍山市高考成绩怎么查询,鞍山师范学院
- gradle 错误: 编码GBK的不可映射字符
- Win10编译和测试libModbus
- 新买电脑编译运行dev c++慢的
- java毕业设计仓库管理系统Mybatis+系统+数据库+调试部署
- 微信小程序 之修改switch组件尺寸大小
- 微信小程序wx.getUserInfo获取用户所在地区将拼音转换为中文的方法
- Python男票管理系统
- 如何获得凤凰网或腾讯视频链接并下载到本地
- 我的发明20220723
- Git和Gitee的使用(仅分享一下自己成功的过程)
- 闰年的判断(python)
- Android技术点汇总
- qt制作一个画板_Qt 一个简易画板实现(Graphics View).pdf
热门文章
- 测试基础-03-用例设计方法:案例讲解
- ScheduledExecutorService线程调度的使用
- mysql异常插件_【异常】诡异的mysql错误,Pagehelper插件混乱导致吗
- JUnit5 测试套件示例
- 为什么php都用mysql,PHP MySQL为什么?
- python怎么实现黑客攻击英国_注意!你的隐私就是这样被黑客获取的
- 程序员:凭什么他大专12K,而我硕士研究生才5K?
- 新手如何从零开始入门前端开发,分享我的学习方法!
- 商品进销差价_商品进销差价如何核算?
- plc tcp ip通讯怎么只能连一个客户端_一款Ethernet/IP和Modbus TCP转OPC UA产品