dp考试

a
【问题描述】 ??个物品 ,每个物品都有恰好两。第 ??种物品的体积和价值分别是 ????和????。 背包的体积为 ??,问在不超过背包体积的情况下最多能放进少价值物品。 ,问在不超过背包体积的情况下最多能放进少价值物品。 ,问在不超过背包体积的情况下最多能放进少价值物品。 ,问在不超过背包体积的情况下最多能放进少价值物品。 ,问在不超过背包体积的情况下最多能放进少价值物品。 ,问在不超过背包体积的情况下最多能放进少价值物品。 ,问在不超过背包体积的情况下最多能放进少价值物品。
【输入格式】
第一行 两个整数 ??,??。
接下来 ??行每两个整数 ????,????。
【输出格式】
一行个整数代表答案 。

【样例输入】
2 3
1 2
2 1
【样例输出】
4
【数据规模与约定】
对于 100%的数据, 1≤??,??,????,????≤100,。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=101;
 7 int w[101],v[101];
 8 int f[101][101];
 9 int main()
10 {
11     int n,m;
12     scanf("%d%d",&n,&m);
13     for(int i=1;i<=n;i++)scanf("%d%d",&w[i],&v[i]);
14     for(int i=1;i<=n;i++)
15     {
16         for(int j=0;j<=m;j++)// 背包的容量
17         {
18             for(int k=0;k<=2;k++)
19             {
20                 if(j>=w[i]*k)
21                 f[i][j]=max(f[i][j],f[i-1][j-w[i]*k]+v[i]*k);
22                 else break;
23             }
24         }
25     }
26     printf("%d",f[n][m]);
27     return 0;
28 }

b
【问题描述】
给你 ??个数 ,找出 这??个数的最长 上升 子序列 。即对于 数列 ??1,??2,?,????,找 到一组 ??1,??2,?,????使得 ??1<??2<?<????且????1<????2<?<??????,同时 使得 这个 ??最大 ,求最大 的??。
【输入格式】
第一行是 一个正整数 ??。
接下来 一行 ??个正整数 ??1,??2,?,??_??。
【输出格式】
输出 最大 的??。
【样例输入】
4
4 2 3 1 54 2 3 1 54 2 3 1 54 2 3 1 54 2 3 1 54 2 3 1 54 2 3 1 54 2 3 1 54

【样例输出】
3
【数据规模与约定】
100%的数据满足 1≤??,????≤1000。

考场上现推的,,,好佩服自己。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 int dp[1001][1001];
 7 int main()
 8 {
 9     int n;
10     scanf("%d",&n);
11     for(int i=1;i<=n;i++)
12         scanf("%d",&dp[i][1]);// 第i个数,长度为1的上升序列是自己
13         for(int i=1;i<=n;i++)//每个数
14         {
15             for(int k=1;k<=i;k++)//之前的每个数
16             {
17                 for(int j=1;j<=i;j++)//最长上升
18                 {
19                      if(dp[i][1]>dp[k][j])
20                      {
21                          if(dp[k][j+1]!=0)
22                          dp[k][j+1]=min(dp[k][j+1],dp[i][1]);
23                         else dp[k][j+1]=dp[i][1];
24                     }
25                     else break;
26                 }
27             }
28
29         }
30     int ans=0;
31     for(int i=1;i<=n;i++)
32     {
33         for(int j=1;j<=1001;j++)
34         {
35             if(dp[i][j]==0)
36             {
37                 if(j>ans)
38                 ans=j;
39                 break;
40             }
41         }
42     }
43     printf("%d",ans-1);
44     return 0;
45 }

c
【问题描述】
一个 字符串 的子序列 是指从中 挑选出 任意 位置 的字符 之后 再组成 的 字符串 。 如果 对于 abcde,ace、ad、bc、bde都是 其子序列 。现在 给你 两个 字符串 ,求一 个字符串 ,使得 该字符串 是这两个 字符串 的子序列 且该字符串 长度 最长 。
【输入格式】
第一行个 字符串 ,只包含 小写 字母 。
第二行 一个 字符串 ,只包含 小写字母 。
【输出格式】
一行 一个 整数 ,代表 字符串 长度 。
【样例输入】
abcdebcdebcdebcde
bedcabedcabedcabedcabedca

【样例输出】
2
【数据规模与约定】
对于 100%的数据 ,字符串 长度 不超过 500。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=601;
 7 char a[MAXN],b[MAXN];
 8 int dp[MAXN][MAXN];
 9 int main()
10 {
11     scanf("%s %s",a,b);
12     int la=strlen(a),lb=strlen(b);
13     for(int i=0;i<la;i++)
14     {
15         for(int j=0;j<lb;j++)
16         {
17             dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
18             if(a[i]==b[j])
19             dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
20         }
21     }
22     printf("%d\n",dp[la-1][lb-1]);
23     return 0;
24 } 
时间: 2024-11-05 04:53:29

dp考试的相关文章

7.18 DP考试解题报告

今天的考试真的是天崩地裂,写了的三个题全炸...然而谁叫我弱+不注意细节呢???真的要扇耳光... T1:题意:一段区间的高度为这个区间中高度的最小值,给定n个宽度,求每个宽度的期望高度 40% :算出长度为x的区间的所有的最小值的取值的和,除以总的方案数(n-x+1),用ST表预处理可以n^2;(记得开long long) 100%:对于每个点求出他取最小值的区间,即用两遍单调栈求出左,右边第一个小于他的值...记为l[i],和r[i],这一步和影魔很像: 对于当前这一个点,考虑以他为最小值,

2016.6.10 考试总结

汽艇(Boat.cpp/c/pas) [问题描述] 有 n 个人要去坐 1 汽艇,每个人单独坐汽艇的快乐程度是 Ci,每多一个人,他的快乐程度会减去 Di,请求出使快乐程度之和达到最大的方案.(假设汽艇的容量足够大). [输入格式] 输入文件共有 3 行: 第1 行是一个整数 n: 第2 行有n 个整数,依次表示每个人单独坐汽艇的快乐程度 Ci(1<=Ci<=10000): 第3 行有n 个整数,依次表示每多 1 人,每个人快乐程度的下降值 Di(1<=Di<=10). [输出格式

20140712 classic 数位DP

其实就是一道蛮简单的数位DP 考试的时候出了点小错导致基本Wa0 还好数据分治有30分- - num[i][j][k]表示前i位数字和为j的数的个数  k=0表示不顶上界  k=1表示顶上界 转移方程见代码 dp[i][j][k]表示前i位数字和为j的数的和 转移方程同见代码 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 #define mod 1000000007 5 typedef long

10.3 noip模拟试题

希望[题目描述]网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”.“后退栈”.这里你需要实现以下几个功能:BACK: 如果“后退栈”为空则忽略此命令. 否则将当前两面压入“前进栈”,从“后退栈”中取出栈顶页面,并设置为当前页面.FORWARD: 如果“前进栈”为空则忽略此命令.否则将当前两面压入“后退栈”,从“前进栈”中取出栈顶页面,并设置为当前页面.VISIT: 将当前页面压入“后退栈”. 并将当前页面置为指定页面, 并将“前进栈”置空.QUIT: 退出.假设此浏览

11.2 morning

noip模拟题day1——棋盘上的问题 day1模拟题 By FancyCoder总览(Overview)注意事项:共3道题目,时间2.5小时.Pascal选手允许使用math库和ansistring.C++选手开放使用STL.允许使用64位整型(int64或long long). 题目名称           炮                 车              皇后程序名           cannon              rook            queen输入文

滚粗记之2016军训后学校模拟赛

2016.8.24 maths(40/100): 容斥原理 f(n)与f(n的质因数)是递推关系 //数据中的“质数”特殊点已经给了提示 所以,先预处理即可 mahjong(0/100):暴搜+hash   orzzzzzzz bzoj1860       n<=100,t<=100 所以这题时间复杂度大致为O(n^2*t) [ZJOI2006]     想到dp         //考试时想到了但不知怎么编,还是太弱了QAQ肿么办 然而暴搜QAQ 附上详解:http://blog.csdn.

7月清北学(zao)堂系列

7.13:模拟,贪心(贪心题大赏),考试 7.14:分治,分块,搜索(大法师大法好),数论 7.15:数据结构(树状数组,线段树,),ST表,树上倍增求LCA 7.16:图论题大赏(分层建图神马的),splay(这个没有整) 7.17:dp:基础,状压,数位,区间 7.18:博弈论dp,考试 7.19:讲题 原文地址:https://www.cnblogs.com/lcez56jsy/p/11212075.html

【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂

1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2745  Solved: 1694[Submit][Status][Discuss] Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2..

京东笔试---通过考试(DP)

题目描述      小明同学要参加一场考试,考试一共有n道题目,小明必须作对至少60%的题目才能通过考试.考试结束后,小明估算出每题作对的概率,p1,p2,...,pn,你能帮他算出他通过考试的概率吗? 输入 输入第一行一个数n(1<=n<=100),表示题目的个数,第二行n个整数,p1,p2,...,pn,表示小明有pi%的概率作对第i题.(0<=pi<=100) 输出     小明通过考试的概率,最后结果四舍五入,保留小数点后五位. 样例输入 4 50 50 50 50 样例输