动态规划练习
2017-03-02 15:08
239 查看
参考资料:http://www.hawstein.com/posts/dp-novice-to-advanced.html
硬币问题:
最长非降子序列:
TopCoder: Zigzag
TopCoder BadNeighbors:
从这里开始就是使用了递归的动态规划
硬币问题:
int main(){ int num[3]={1,3,5}; int now=0; int d[15]; for(int i=0;i<=11;i++) d[i]=i; for(int i=0;i<=11;i++){ for(int j=0;j<3;j++){ if(num[j]<=i&&d[i-num[j]]+1<d[i]) d[i]=d[i-num[j]]+1; } } for(int i=0;i<12;i++) printf("%d ",d[i]); printf("\n"); return 0; }
最长非降子序列:
int main(){ int num[6] = {5,3,4,8,6,7}; int d[6]; for(int i=0;i<6;i++) d[i]=1; for(int i=1;i<6;i++){ if(num[i-1]<num[i]) d[i]=d[i-1]+1; else d[i]=d[i-1]; } for(int i=0;i<6;i++) printf("%d ",d[i]); printf("\n"); return 0; }
TopCoder: Zigzag
#include <cstdio> #include <iostream> using namespace std; int main(){ int n,num[105],d[105]; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&num[i]); for(int i=0;i<n;i++) d[i]=1; int m = num[0]; int count=1; for(int i=1;i<n;i++){ if(count){ if(m<num[i]) {d[i]=d[i-1]+1;m=num[i];count=0;} else d[i]=d[i-1]; }else{ if(m>num[i]) {d[i]=d[i-1]+1;m=num[i];count=1;} else d[i]=d[i-1]; } } int maxN = 0; for(int i=0;i<n;i++) maxN = max(maxN,d[i]); cout<<"Result "<<maxN<<endl; return 0; }
TopCoder BadNeighbors:
#include<cstdio> #include<iostream> using namespace std; int n,num[500],sum[500]; int getAnswer(int i1,int i2){ if(i1>i2) return 0; sum[i2] = max(getAnswer(i1+1,i2),getAnswer(i1+2,i2)+num[i1]); return sum[i2]; } int main(){ scanf("%d",&n); for(int i=0;i<n;i++) {scanf("%d",&num[i]);sum[i]=num[i];} int answer = max(getAnswer(0,n-2),getAnswer(1,n-1)); printf("Answer: %d\n",answer); return 0; }
从这里开始就是使用了递归的动态规划
相关文章推荐
- 动态规划练习一 01:最长上升子序列
- 动态规划练习一 19:最低通行费
- 动态规划练习-2(最大子矩阵)
- 动态规划练习一 总结
- 动态规划练习一之最低通行费
- 动态规划练习一 移动路线
- 动态规划练习01:最长上升子序列
- 动态规划练习06:登山
- 动态规划练习28:Maximum sum
- 动态规划练习——采药
- 动态规划练习——移动路线
- 编程练习-动态规划(矩阵乘法)
- 微策略2012年校园招聘笔试题两道-动态规划和DFS练习
- 算法练习(7) —— 动态规划 Strange Printer
- 背包型动态规划练习-codevs-1014装箱问题
- SDAU 编程练习三 动态规划和动态规划与背包问题相结合的问题
- HDU 3555 浅谈数位动态规划逆向计数问题练习
- 2016. 4.10 NOI codevs 动态规划练习
- leetcode 55 动态规划练习
- 动态规划练习1 [导弹拦截]