随笔分类 - dp
HDU1244Max Sum Plus Plus Plus
摘要:Max Sum Plus Plus PlusTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1042Accepted Submission(s): 524 Problem Description给定一个由n个正整数组成的整数序列a1 a2 a3 ... an求按先后次序在其中取m段长度分别为l1、l2、l3...lm的不交叠的连续整数的和的最大值。Input第一行是一个整数n(0 ≤ n ≤ 1000),n = 0表示输入结束 第二行的第一.
阅读全文
求最长不连续递减子列数
摘要:HDU1257这个思想挺好 1 #include 2 #include 3 int main() 4 {// freopen("C:\\Users\\Sky\\Desktop\\1.in","r",stdin); 5 int n,i,j,x,m,dp[1005]; 6 while(scanf("%d",&n)!=EOF&&n) 7 { 8 memset(dp,0,sizeof(dp)); 9 dp[1]=0;m=0;10 for(i=1;im){dp[++m]=x;}//所有最后一个元素都不比x大,x为新的子列
阅读全文
hdu1231最大连续子序列DP/两点法
摘要:最大连续子序列Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15168Accepted Submission(s): 6624 Problem Description给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 6 #include 7 #define MAX 10005 8 using namespace std; 9 10 int main()..
阅读全文
HDU1059 DP模板
摘要:#includeint dp[120005];int V,v;void bag01(int c,int w)//01背包{for(v=V; v>=c; v--)if(dp[v]=V)bagall(c,w);else{int k=1;while(k<p){bag01(c*k,w*k);p=p-k;k=k+k;}bag01(c*p,w*p);}}int main(){int n[8];int i,sum,p=0;while(scanf("%d%d%d%d%d%d",&n[1],&n[2],&n[3],&n[4],&n[5],&
阅读全文
HDUOJ 2069 COINchange(母函数用的二维费用背包)
摘要:#include#include#include#include#includeusing namespace std;int main(){int dp[260][105];int a[5]={50,25,10,5,1};int n;memset(dp,0,sizeof(dp));for (int i = 0; i < 100; i++){dp[0][i]=1;}for (int i = 0; i < 5; i++){for (int j = a[i]; j <= 250; j++){for (int k = 1; k <= 100; k++){if (dp[j-a[
阅读全文
dp问题状态转移方程总结
摘要:1(最长公共子串(注意和最长公共子序列区别))两个字符串str1和str2,长度分别为(l1,l2)dp[i][j]表示以两个字符串分别以第i和第j个字符结尾所能达到的公共子序列的长度,由于下面涉及到i-1和j-1,那么这个时候我们一般从i=1和j=1开始到i 0且j> 0 且ch1[i-1]= ch2[j-1]; dp[i][j]= 0; i > 0且j> 0 且ch1[i-1]!= ch2[j-1];注意dp[i][0]=0(0 0且j> 0 且ch1[i-1]= ch2[j-1]; dp[i][j]= max {dp[i-1][j] , dp[i][j-1]};i
阅读全文