![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 76
TC_jiang886
这个作者很懒,什么都没留下…
展开
-
区间dp 杭电Cheapest Palindrome
大概意思是添加或删除任意个字母构成汇文字符串添加和删除时的代价是不相同的 求最小的代价dp【i】【j】表示的是第i个到第j个合并的最小代价如果是两个的话能相同就是零不相同就看是添加或者删除哪一个代价最小就执行哪一步三个或三个以上合并先判断要合并的能否和第一个相同如果相同就判断是dp[i][j]=min(dp[I+1][j-1],dp[I][j-1]+当前字母的最小代价,dp[I+1][原创 2014-04-24 16:56:21 · 494 阅读 · 0 评论 -
HDU 4539 郑厂长系列故事――排兵布阵
/*曼哈顿距离的定义是:两个点的坐标为(x1,y1),(x2,y2),两点的曼哈顿距离为|x1-x2|+|y1-y2|题意:题上要求是两个士兵的距离不能是曼哈顿距离为2,意思就是这个点在同一行同一列不能相间,这个点的左上,左下,右上,右下角不能有士兵.思路:dp+状态压缩dp[i][j][k]定义的状态为i是当前行,j为当前行的状态,k为上一行的状态类似炮兵阵地*/#inclu原创 2015-01-24 09:45:57 · 2407 阅读 · 0 评论 -
poj 3311
//Floyd + 状态压缩DP//题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短//也就是TSP(旅行商)问题,首先不难想到用FLOYD先求出任意2点的距离dis[i][j]//接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过//定义状态DP(S,i)表示在S状态下,从0开始到达城市I的最转载 2015-01-23 14:42:44 · 425 阅读 · 0 评论 -
HDU 1565 方格取数(1)
/*dp+状态压缩和炮兵阵地类似*/#include#include#define Max(a,b) a>b?a:bint dp[25][20000],s[20000],len,Map[25][25],n;int check(int m){ if(m&(m<<1)) return 0; return 1;}void Inint(){原创 2015-01-22 08:28:24 · 737 阅读 · 0 评论 -
简单状态压缩 nyoj 81 炮兵阵地
#include#includeint n,m,I;int dp[105][105][105],s[105],ss[105];int max(int a,int b){ return a>b?a:b;}int check(int date){ if(date&date return 0; if(date&date原创 2014-05-02 15:23:31 · 524 阅读 · 0 评论 -
POJ 1321 棋盘问题
#include#includeint check(int a,int m){ int b=0; while(a>0) { if(a&1) b++; a>>=1; } if(b==m) return 1; return 0;}int main(){ int n原创 2015-01-30 19:28:25 · 572 阅读 · 0 评论 -
hdu 3001 Travelling
/*题意:说一个人想游玩n个城市,每个城市最多走两次,问最短的距离*/#include#include#define MMax 2000000000#define Min(a,b) a>b?b:aint dp[59050][15],cs[59050][15],dis[15][15];//dp[i][j]定义的状态是在i状态时到达j的最短的,cs[i][j]表示在i状态下的经过j的原创 2015-01-30 11:05:23 · 747 阅读 · 0 评论 -
TSP+dp+状态压缩的本质
/*dis[1][2]=1;dis[1][3]=3;dis[1][4]=6;dis[2][3]=2;dis[2][4]=5;dis[3][4]=3;二进制从右往左依次代表的1-n,0代表没有经过1代表经过了,比如3化成二进制为11代表经过了1和2.dp[i][j]代表的状态为在状态i的时候从1出发最后到达j的值只经过一个点dp[1][1]=0//初始化,其他的都为无穷大原创 2015-01-29 17:11:36 · 663 阅读 · 0 评论 -
南阳 oj 176 整数划分(二)
/*定义状态dp[i][j]大小为i,分解成j个数的和有多少种可能状态转移方程为,dp[i][j]=dp[i-j][1]+dp[i-j][2]+...dp[i-j][j];*/#include#includeint main(){ int dp[105][105],i,j,n,m,k,t; memset(dp,0,sizeof(dp));原创 2014-10-31 17:07:12 · 480 阅读 · 0 评论 -
复杂度 743 南阳oj
4 71 2 3 42 3 4 53 4 5 64 5 6 7第三行如果出现一个3话就要+4第三行如果出现一个4话就要+3第三行如果出现一个3话就要+2 第三行如果出现一个3话就要+1第二行如果出现一个2话就要+第三行3 4 5 6出现所有的总次数(1+2+3+4)第二行如果出现一个3话就要+第三行出现4 5 6的总次数(1+2+3)第二行如果出现一个4原创 2014-10-14 20:20:32 · 439 阅读 · 0 评论 -
uva 147 Dollars
#includeint main(){ long long a[15000]={1}; long long i,j; long long coin[15]={1,2,4,10,20,40,100,200,400,1000,2000}; for(i=0;i { for(j=coin[i];j a[j原创 2014-07-31 18:57:44 · 389 阅读 · 0 评论 -
Dollars uva 147
Time limit: 3.000 seconds限时:3.000秒 Problem问题New Zealand currency consists of 100,50, 20,10, and 5notesand2, $1, 50c, 20c, 10c and 5c coins. Write a program that will determine, for转载 2014-07-31 11:00:51 · 414 阅读 · 0 评论 -
威威猫系列故事――打地鼠
#include#include#includeint Min(int a,int b){ return a}int abcd(int a,int b){ if(a-b>0) return a-b; else return b-a;}int main(){ int n,m,i,j,f原创 2014-07-24 09:01:07 · 622 阅读 · 0 评论 -
HDU 3681 Prison Break
/*给一个n*m的图,F代表起点,G代表充电池,一个充电池只能用一次,但可以用多个充电池,只能把电池充到最大(原始的电量),可以走过不用,D不能走,问的是把所有的Y走一遍的原始的电量是多少dp+状态压缩+二分+bfsdp[i][j]表示的状态是在i状态到达j的最大的电量*/#include#include#include#define Max(a,b) a>b?a:b#原创 2015-01-26 14:51:08 · 548 阅读 · 0 评论