
动态规划(DP)
sky_zdk
这个作者很懒,什么都没留下…
展开
-
poj 1947 树形dp(求一颗树最少经过几次剪枝,可以得到特定大小的子树)
#include#include#define MIN(x,y) ((x)>(y)?(y):(x))struct node{ int to,next;}e[200];int head[200],cnt;int dp[200][200];int f[200],n,p,num[200],flag[200];void add_edge(int from,int to){ e[cn原创 2017-04-28 07:16:11 · 362 阅读 · 0 评论 -
hdu 4003 求用k个机器人遍历一棵树的所有节点所需的最小花费
求用k个机器人遍历一棵树的所有节点所需的最小花费原创 2017-04-28 09:42:46 · 800 阅读 · 0 评论 -
hdu 1561 选某个物品前必须选特定的其它物品,求最大价值
选某个物品前必须选特定的其它物品,求最大价值原创 2017-04-28 14:11:18 · 311 阅读 · 0 评论 -
poj 2486 树形dp(给定步数 走一棵树,获得的节点值总和的最大值)
给定步数 走一棵树,获得的节点值总和的最大值)原创 2017-04-28 20:31:02 · 487 阅读 · 0 评论 -
poj 3345 树形dp
选了父节点,就代表获得了其所有子节点的权值,求选最少节点达到或超过特定的值原创 2017-04-29 07:40:36 · 448 阅读 · 0 评论 -
hdu 4044
敌人从树根(1号节点)出发,叶子节点是你的基地,敌人的路线不固定,经过每个节点的塔后受到伤害问你在总的花费下,你选择建一些塔,敌人的血量至多是多少才能保证不伤害到你的基地。原创 2017-04-29 18:45:15 · 471 阅读 · 0 评论 -
不再孤独的HandsomeHow 状压dp
G. 不再孤独的HandsomeHowTime Limit: 1000msMemory Limit: 65536KB64-bit integer IO format: %lld Java class name: MainSubmit StatusSample Input220 22 040 2 4原创 2017-04-30 08:35:22 · 371 阅读 · 0 评论 -
TaoSama Becomes the God of Stocks dp
H. TaoSama Becomes the God of StocksTime Limit: 1000msMemory Limit: 65536KB64-bit integer IO format: %lld Java class name: MainSubmit StatusSample Input18 2原创 2017-04-30 11:25:56 · 324 阅读 · 0 评论 -
poj 1018 dp
#include#include#define INF 0x3f3f3f3f#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))int dp[120][400];int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("原创 2017-04-30 22:04:18 · 269 阅读 · 0 评论 -
poj 1050 求矩阵最大的子矩阵和 DP
求矩阵最大的子矩阵和原创 2017-05-01 09:04:49 · 264 阅读 · 0 评论 -
poj 1157 dp
#include#include#define INF 0x3f3f3f3f#define MAX(x,y) ((x)>(y)?(x):(y)) int dp[200][200];int w[200][200];int main(){ int f,v; scanf("%d%d",&f,&v); for(int i=1;i<=f;i++) for(int j=1;j<=v;j+原创 2017-05-01 19:02:44 · 533 阅读 · 0 评论 -
poj 1163 dp 走三角形取路径的最大值
走三角形取路径的最大值原创 2017-05-01 19:17:54 · 439 阅读 · 0 评论 -
poj 3624 01背包
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))long long dp[12888];int v[3480],w[3480];int main(){ int n,col; scanf("%d%d",&n,&col); for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&v[i]);原创 2017-04-19 11:26:39 · 371 阅读 · 0 评论 -
hdu 2602 01背包
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))long long dp[1010];int v[1010],w[1010];int main(){ int T; scanf("%d",&T); while(T--) { int n,col; scanf("%d%d",&n,&col); for(int i=1;原创 2017-04-19 11:23:16 · 545 阅读 · 0 评论 -
hdu 2546 01背包(从一堆物品中尽可能组成接近给定重量的方案)
#include#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))using namespace std;int dp[1010];int c[1010];int main(){ int n,col; while(~scanf("%d",&n)&&n)原创 2017-04-19 13:00:21 · 400 阅读 · 0 评论 -
hdu 2955
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))double dp[110000],v[110];int w[100];int main(){ int n,T; double col; scanf("%d",&T); while(T--) { int sum=0; scanf("%lf%d",&col,&n);原创 2017-04-20 06:34:36 · 293 阅读 · 0 评论 -
poj 2184 01背包,求体积和重量(有负数)之和最大。
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define INF 0x3f3f3f3fint dp[200200],count[200200],ts[200],tf[200];int main(){ int n; scanf("%d",&n); int sum=0; for(int i=1;i<=n;i++) {原创 2017-04-20 12:03:58 · 784 阅读 · 0 评论 -
poj 2336 DP
每个车必须在规定时间之后才能出发,而船每次最多载n个车,往返需要2*t的时间,求最短时间,把所有车晕倒对岸。原创 2017-05-10 21:31:45 · 296 阅读 · 0 评论 -
poj 1179 循环dp 类似矩阵连乘
循环dp 类似矩阵连乘原创 2017-05-02 18:15:02 · 278 阅读 · 0 评论 -
poj 2639 背包的第k最优解
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))int dp[1000][100];int v[200],w[200];int a,b,c,t1[200],t2[200];int main(){ int T,n,col,rank; scanf("%d",&T); while(T--) { scanf("%d%d%d",&原创 2017-04-20 13:36:14 · 540 阅读 · 0 评论 -
poj 2923 状态压缩dp
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))#define INF 0x3f3f3f3fint dp[1025];int vis[1025],w[105],d[1025];int n,c1,c2;int judge(int x){ int sum=0;原创 2017-04-20 15:15:34 · 316 阅读 · 0 评论 -
poj 1651 DP 从一个序列中任意选一个数,进行某种计算,然后移除这个数,直到最后
从一个序列中任意选一个数,进行某种计算,然后移除这个数,直到最后原创 2017-05-03 10:36:35 · 373 阅读 · 0 评论 -
poj 2353 DP 求从一个矩形第1层走到最后一层的最小花费
求从一个矩形第1层走到最后一层的最小花费 ,每次只可以走一步,往下,往左,往右原创 2017-05-11 12:52:31 · 251 阅读 · 0 评论 -
poj 2355 DP 单调队列优化
先贴一个没有优化的代码:#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))#define INF 0x3f3f3f3f;int L[6],C[6];int d[10010];int dp[10011];int cal(int d1,int d2){ for(原创 2017-05-11 14:48:10 · 341 阅读 · 0 评论 -
poj 1189 DP
我觉得有一种情况 网上代码没考虑 但是可以AC poj数据很弱:5 3** ** * ** * * *. . . . .这样算出来每个洞里的概率都为0 应该是错的 因为有个方程 dp[i+2][j+1]+=dp[i][j]; 会忽略已经掉到洞里了。#include#includelong long gcd(long long a,l原创 2017-05-03 12:09:21 · 261 阅读 · 0 评论 -
hdu 3466 01背包
#include#include#include#define MAX(x,y) ((x)>(y)?(x):(y))using namespace std;int dp[5050];struct node{ int p,q,v;}m[550];bool cmp(const node &a,const node &b){ return a.q-a.p<b.q-b.p;}i原创 2017-04-21 06:50:58 · 474 阅读 · 0 评论 -
hdu 2126 求方案数
#include#include#include#define MAX(x,y) ((x)>(y)?(x):(y))using namespace std;int dp[5050][2];int w[1000];int main(){ int n,col,T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&col); f原创 2017-04-21 08:43:04 · 295 阅读 · 0 评论 -
poj 1037 DP 求波浪序列中按字典序排列的第k个序列
求波浪序列中按字典序排列的第k个序列原创 2017-05-12 09:42:43 · 516 阅读 · 0 评论 -
poj 1191 把一个矩形分成n块,求其均方差最小 dp
把一个矩形分成n块,求其均方差最小原创 2017-05-04 07:03:27 · 570 阅读 · 0 评论 -
poj 1080 DP 2个串,中间可加‘-’变成长度相同的串,求最小代价
DP 2个串,中间可加‘-’变成长度相同的串,求最小代价原创 2017-05-12 14:58:00 · 239 阅读 · 0 评论 -
poj 3181 求各种纸币组成某个特定值的方案数
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))long long dp1[1010];long long dp2[1010];long long MID;int main(){ int n,k; long long ans; scanf("%d%d",&n原创 2017-04-21 18:05:45 · 340 阅读 · 0 评论 -
poj 1787 求达到总钱数的选硬币的最大数量(硬币有个数限制)
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))int dp[10010],path[10010],u[10010];int main(){ int v[]={1,5,10,25}; int n[5],col,ans[26]; while(~scanf("%d%原创 2017-04-21 20:34:37 · 828 阅读 · 0 评论 -
poj 2063 背包
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))int dp[100000];int w[11],v[11];int main(){ int T,col,t,num,n; scanf("%d",&T); while(T--) { scanf("%d%d",&col,&t); scanf("%d",&n); for(原创 2017-04-22 08:13:33 · 233 阅读 · 0 评论 -
zoj 3623 背包
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))int dp[1000],w[100],v[100];int main(){ int n,life; while(~scanf("%d%d",&n,&life)) { for(int i=0;i<n;i++) scanf("%d%d",&w[i],&v[i]); mems原创 2017-04-22 11:16:35 · 267 阅读 · 0 评论 -
poj 1322 概率dp
#include#includedouble dp[3][160];int main(){ int n,m,c; while(~scanf("%d",&c)&&c) { scanf("%d%d",&n,&m); if(n>1000) { if(n&1) n=1001; else n=1000; } if(m>c||(n+m)&1)原创 2017-05-04 15:32:11 · 260 阅读 · 0 评论 -
poj 1141 DP 括号配对
括号配对原创 2017-05-12 20:57:05 · 325 阅读 · 0 评论 -
zoj 3662 dp (递推k个数 组成的和为n,最小公倍数为m的所有可能)
#include#include#define MOD 1e9+7int dp[2][1010][1002];int lo[1100][1100],L[110];int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}int lcm(int a,int b){ return a/gcd(a,b)*原创 2017-04-22 15:53:59 · 486 阅读 · 0 评论 -
poj 1458 最长公共子序列
最长公共子序列原创 2017-05-05 09:01:20 · 250 阅读 · 0 评论 -
poj 1695 DP
#include#include#define INF 0x3f3f3f3f#define MIN(x,y) ((x)>(y)?(y):(x))int dp[36][36][36];int d[36][36];int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int原创 2017-05-24 12:30:34 · 432 阅读 · 0 评论 -
hdu 2571 命运
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))int dp[25][1005];int m[25][1005];int main(){ int T,col,row; scanf("%d",&T); while(T--) { scanf("%d%d",&row,&col); for(int i=1;i<=row;i++原创 2017-04-23 10:56:26 · 346 阅读 · 0 评论