动态规划
溺水行舟
这个作者很懒,什么都没留下…
展开
-
最长上升子序列
#include using namespace std;int main(void){ int n,i,j,a[100],b[100];//b[i]表示以a[i]为终点时最长的串 while(cin>>n) { i=0; while(i>a[i++]; for(b[0]=1,i=1;i<n;i++) for(b[i]=1,j=0;j<i;j原创 2012-07-21 14:03:28 · 1057 阅读 · 0 评论 -
HDU 1421 搬寝室(动态规划)
dp[i][j]表示从前i个里选j对,dp[i][j]=min(dp[i-2][j-1]+(a[i]-a[i-1])^2,dp[i-1][j])先排序,注意初始化#include #include #include #include using namespace std;int n,k,m,a[2005],dp[2005][2005];int main(){ int i原创 2013-04-03 17:38:28 · 976 阅读 · 0 评论 -
nyist 745蚂蚁的难题(二)(环面连续最大子串和)
此题是连续最大子串和(nyist 44)的变形,只是改成一个环状而已,由于数据量大,用枚举起点+加原来的求子串和的代码是两重循环,必定超时,但是我还是试了下,下面是有超时代码。 其实它只是在原来的情况上多加了一种首位想接情况,所以只需不管首位想接先求出最大和ans,然后求出首位想接情况的最大和ans1,取两者的最大值即可。ans1的求法其实和ans的求法差不多,试想一下一个环,你要是求得了不首原创 2013-08-17 11:05:02 · 1440 阅读 · 0 评论 -
nyist 737 相邻石子合并问题
http://acm.nyist.net/JudgeOnline/problem.php?pid=737动态规划状态方程:dp[i][j]=d[i][k]+dp[k+1][j]+(sum[k]-sum[i-1])+(sum[j]-sum[k])边界:0 if(i==j) dp[i][j]=0; sum[i]=前i个数的和。#include原创 2013-08-17 16:22:32 · 1357 阅读 · 1 评论 -
UVA 10827(环面上最大和,矩阵最大和变)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=17681 -1 0 0 -4 1 -1 0 0 -4 1 -1 0 0 -42 3 -2 -3 2 2 3 -2 -3 2 2 3 -2 -3 2原创 2013-08-17 10:21:25 · 1618 阅读 · 0 评论 -
zb的生日(搜索)
这样搜索不错:#include#includeint a[10000];int dd;//用dd来保存最小差 void fun(int sum,int cur,int m,int i) { if (i<m)//最多选m个 { //假设cur为其中一个的分得的和,如,sum=67,cur=35,t1=-3; int t1=sum-2转载 2012-07-26 21:05:14 · 1904 阅读 · 0 评论 -
整数划分(各种类型)nyist 571
1.将n划分成不大于m的划分法: 1).若是划分多个整数可以存在相同的: dp[n][m]= dp[n][m-1]+ dp[n-m][m] dp[n][m]表示整数 n 的划分中,每个数不大于 m 的划分数。 则划分数可以分为两种情况: a.划分中每个数都小于 m,相当于每个数不大于 m- 1, 故划分数为 dp[n][m-1]. b.划分中有一个数为 m. 那原创 2012-07-27 17:18:46 · 1391 阅读 · 0 评论 -
tyvj p1214硬币问题(完全背包)
☆硬币问题 描述 Description 有n种硬币,面值为别为a[1],a[2],a[3]……a[n],每种都有无限多。给定非负整数s,可以选取多少个硬币使得面值和恰好为s?输出硬币数目最小值和最大值原创 2012-08-16 17:04:07 · 2060 阅读 · 0 评论 -
tyvj p1096 0-1背包求种数
在N个数中找出其和为M的若干个数。先读入正整数N(1 输入格式 Input Format 第一行是两个数字,表示N和M。第二行起是N个数。 输出格式 Output Format 就原创 2012-08-16 17:19:06 · 1581 阅读 · 0 评论 -
zoj 1196区间动态规划
Sample Input6 356121920270 0Sample OutputChain 1Depot 1 at restaurant 2 serves restaurants 1 to 3Depot 2 at restaurant 4 serves restaurants 4 to 5Depot 3 at restaurant 6 serv原创 2012-09-27 22:11:31 · 2079 阅读 · 0 评论 -
有依赖的01背包问题( 金明的预算方案)
考虑到每个主件最多只有两个附件,因此我们可以通过转化,把原问题转化为01背包问题来解决,在用01背包之前我们需要对输入数据进行处理,把每一种物品归类,即:把每一个主件和它的附件看作一类物品。处理好之后,我们就可以使用01背包算法了。在取某件物品时,我们只需要从以下四种方案中取最大的那种方案:只取主件、取主件+附件1、取主件+附件2、既主件+附件1+附件2。很容易得到如下状态转移方程:f[i,j原创 2012-09-28 22:11:56 · 21448 阅读 · 7 评论 -
n个字符串的最长公共子序列
#include #include #include using std::max;const int MAXF = 1000010;const int MAXN = 110;int n;int base[MAXN], len[MAXN], pos[MAXN];char ans;char f[MAXF];char words[MAXN][MAXN];void solve()原创 2012-10-21 15:32:02 · 5589 阅读 · 0 评论 -
hdu 1292分组(dp)
考虑一支队伍分组的数目,如果这支队伍有n个人,就有n种情况分别是一个组,两个组。。。。i个人分成j组有两种方式,一种是i-1个人分成j-1组之后,第i个人独立分成一组,另一种情况是i-1个人分成j组,第i个人随便加入j组中的任何一组,也都符合条件。状态转移方程为f[i][j]=f[i-1][j-1]+f[i-1][j]*j。#include #include using names原创 2013-10-07 11:10:04 · 1257 阅读 · 0 评论