dp
lcxdz
这个作者很懒,什么都没留下…
展开
-
A. Vacations (dp 贪心
添加链接描述dp方程是选择健身 选择工作 选择比赛的最少休息天数原创 2022-06-11 11:57:57 · 150 阅读 · 0 评论 -
A. Cut Ribbon(完全背包 满足条件
添加链接描述为了装满背包 需要初始化为负无穷 ,dp0=0原创 2022-06-05 21:49:05 · 115 阅读 · 0 评论 -
E. Tetrahedron (线性dp 压缩空间
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e7+9;#define int long longint mod=1e9+7;signed main(){ std::ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); int n; cin>>n; // dp[2][0]=3; // dp原创 2022-05-21 20:27:49 · 177 阅读 · 0 评论 -
A. Boredom(线性dp
添加链接描述#include<bits/stdc++.h>using namespace std;#define int long longconst int N=1e5+9;int mp[N],dp[N][2];//前i个数的最大分数 选或不选signed main(){ int n; cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; m原创 2022-05-21 19:54:52 · 140 阅读 · 0 评论 -
P1077 [NOIP2012 普及组] 摆花
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=110,mod=1e6+7;int dp[N][N],arr[N];//前i朵花 一共j朵的方案数int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++)cin>>arr[i]; dp[0][0]=1; for(int i=1;i<原创 2022-05-12 08:24:53 · 83 阅读 · 0 评论 -
CF414B Mashmokh and ACM (dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=2100,mod=1e9+7;int dp[N][N];//长度为i 最大元素为j种类int main(){ int n,k; cin>>n>>k; // dp[0][0]=1; for(int i=1;i<=n;i++)dp[1][i]=1; for(int i=2;i<=k;i++){原创 2022-05-12 08:18:44 · 89 阅读 · 0 评论 -
P1057 [NOIP2008 普及组] 传球游戏 (dp
添加链接描述dp表示 传递i次后第j个人的方案数当前人的方案数等于左边或者右边传递的总和#include<bits/stdc++.h>using namespace std;const int N=35;int dp[N][N];int main(){ int n,m; cin>>n>>m; dp[0][1]=1; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j+原创 2022-05-11 22:10:40 · 375 阅读 · 0 评论 -
P1048 [NOIP2005 普及组] 采药 (滚动数组 01背包
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1100;int dp[2][N],g;int main(){ int T,M; cin>>T>>M; for(int i=1;i<=M;i++){ int x,y; cin>>x>>y; g=1-g; for(int j=0原创 2022-05-11 22:03:11 · 98 阅读 · 0 评论 -
P1049 [NOIP2001 普及组] 装箱问题 (滚动数组 dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=2e4+9;int dp[2][N],g;int main(){ int V,n; cin>>V>>n; for(int i=1;i<=n;i++){ g=1-g; int x; cin>>x; for(int j=0;j<=V;j原创 2022-05-11 21:57:34 · 187 阅读 · 0 评论 -
4414. 子序列 (数论 线性dp
添加链接描述数论:三种情况:1.找到最大的数,如果这个数是<=0,说明都是负数或0,找到最大的负奇数既答案2.最大的正数和为奇数,为答案,3.最大的正数和为偶数,判断减去最小正奇数和加上最大负奇数哪个大为答案;#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int arr[N];int sum=0,mx_ne=-0x3f3f3f3f,mi_po=0x3f3f3f3f,mx_num=-0x3f3f3原创 2022-05-06 22:04:46 · 150 阅读 · 0 评论 -
Strategic game (树形dp 树的最小点覆盖
添加链接描述#include<stdio.h>#include<vector>#include<algorithm>#include<iostream>#include<cstring>using namespace std;const int N=2000;vector<int>v[N];int dp[N][2],root=1,in[N];void dfs(int u,int fa){ dp[u][1]=1;原创 2022-04-28 22:40:02 · 278 阅读 · 0 评论 -
没有上司的舞会 (树形dp 最大独立集
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=6e3+9;vector<int>v[N];int arr[N];int mx=0;int dp[N][2];void dfs(int u,int fa){ dp[u][1]+=arr[u]; for(auto it:v[u]){ if(it==fa)continue; dfs(it,u); dp原创 2022-04-28 22:39:10 · 126 阅读 · 0 评论 -
小G有一个大树 (树形dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9;vector<int>v[N];int dp[N],n;int ans=0x3f3f3f3f,id=0x3f3f3f3f;void dfs(int u,int fa){ dp[u]=1; int mx=0; for(auto it:v[u]){ if(it==fa)continue; dfs(it,原创 2022-04-27 08:25:50 · 101 阅读 · 0 评论 -
275. 传纸条(线性dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=55;int arr[N][N];int dp[N*2][N][N];//第i的步数,x为第一次位置 y为第二次位置int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){原创 2022-04-16 22:10:37 · 213 阅读 · 0 评论 -
274. 移动服务(线性dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=209,M=1e3+9;int w[N][N],arr[M];int dp[M][N][N];//第i个任务同时在i任务的位置 一个在j 一个在kint main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++ ){ for(int j=1;j<=n原创 2022-04-16 22:09:29 · 162 阅读 · 0 评论 -
273. 分级 (线性dp 性质
添加链接描述判断每个数是否可以最小#include<bits/stdc++.h>using namespace std;const int N=2e3+9;int arr[N],brr[N];int n,dp[N][N];int DP(){ memset(dp,0,sizeof dp); for(int i=1;i<=n;i++)brr[i]=arr[i]; sort(brr+1,brr+1+n); for(int i=1;i<=n;i+原创 2022-04-16 15:54:30 · 161 阅读 · 0 评论 -
272. 最长公共上升子序列(线性dp
添加链接描述dp表示:a的1~i与b的1 ~j以b[j]为结尾的公共上升子序列#include<bits/stdc++.h>using namespace std;const int N=3009;int arr[N],brr[N],dp[N][N];int main(){ int n; cin>>n; for(int i=1;i<=n;i++)cin>>arr[i]; for(int i=1;i<=n;i++)c原创 2022-04-16 08:48:42 · 147 阅读 · 0 评论 -
271. 杨老师的照相排列 (线性dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=31;#define int long longint dp[N][N][N][N][N],arr[N];signed main(){ int k,n; while(cin>>k,k){ memset(dp,0,sizeof dp); memset(arr,0,sizeof arr);原创 2022-04-16 08:44:17 · 127 阅读 · 0 评论 -
Array Division (dp 最长上升子序列
添加链接描述#include <bits/stdc++.h>using namespace std;#define int long longconst int N=5100;int arr[N],brr[N],suma[N],sumb[N];int dp[N];signed main(){ std::ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int T; cin>>T;原创 2022-04-12 21:51:34 · 90 阅读 · 0 评论 -
造桥 (线性dp
添加链接描述#include <bits/stdc++.h>using namespace std;#define int long longconst int N = 1e5 + 9, mod = 1e9 + 7;string s[N];int dp[N][30];//前i个物品的最后数字为j的长度signed main(){ std::ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int T;原创 2022-04-10 17:01:59 · 305 阅读 · 0 评论 -
897. 最长公共子序列 (dp 模板 选或不选
添加链接描述#include<bits/stdc++.h>using namespace std;string a,b;const int N=1009;int dp[N][N];//a的前i个字母 和b的前j个字母的最大长度 int main(){ int n,m; cin>>n>>m; cin>>a>>b; a=" "+a; b=" "+b; for(int i=1;i<=n;i原创 2022-04-08 18:36:30 · 319 阅读 · 0 评论 -
885. 求组合数 I (组合数 取模
添加链接描述#include<bits/stdc++.h>using namespace std;#define int long longconst int mod=1e9+7;const int N=2009;int C[N][N];void init(){ for(int i=0;i<=2000;i++) { for(int j=0;j<=i;j++){ if(j==0)C[i][j]=1;原创 2022-04-07 22:24:30 · 176 阅读 · 0 评论 -
3417. 砝码称重 (dp
添加链接描述时隔一年 不看题解在模拟赛上写出来了 超兴奋哈哈哈#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int dp[110][N];//前i个 重量为jint arr[110];int mp[N];int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i];原创 2022-04-07 19:58:41 · 335 阅读 · 0 评论 -
1055. 股票买卖 II (贪心 dp 状态机
添加链接描述贪心思路就是相邻是否值得买入卖出#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; int a; cin>>a; int ans=0; for(int i=1;i<n;i++){ int b; cin>>b; if(b>a)ans+=b-a;原创 2022-04-05 16:12:29 · 150 阅读 · 0 评论 -
1214. 波动数列(推公式 组合背包dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9;#define int long longint mod=100000007;int dp[N][N];//!!前i个数总和mod n=j的方案数signed main(){ int n,s,a,b; cin>>n>>s>>a>>b; dp[0][0]=1; for(in原创 2022-04-01 14:14:31 · 103 阅读 · 0 评论 -
1212. 地宫取宝 (限制条件方案数dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=55;int w[N][N];int dp[N][N][15][15];//!!取ij格子有k件最大价值为c的方案数int mod=1e9+7;int main(){ int n,m,k; cin>>n>>m>>k; for(int i=1;i<=n;i++){ for(int j原创 2022-04-01 12:25:46 · 98 阅读 · 0 评论 -
1205. 买不到的数目 (dp dfs打表 规律 数论
添加链接描述#include<bits/stdc++.h>using namespace std;int ans;bool dfs(int sum,int a,int b){ // cout<<sum<<endl; if(sum==0)return 1; if(sum>=a) { if(dfs(sum-a,a,b))return 1; }; if(sum>=b&&原创 2022-03-29 18:38:57 · 172 阅读 · 0 评论 -
叠硬币 (01背包 dp状态记录
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int arr[N];int dp[N];int main(){ int n,h; cin>>n>>h; for(int i=1;i<=n;i++){ cin>>arr[i]; } sort(arr+1,arr+1+n); memset(dp,0x原创 2022-03-27 13:50:02 · 138 阅读 · 0 评论 -
瓜瓜打游戏(EASY) (计数dp
添加链接描述前i个数选j个数dp前i的选j个数=前-1的选j-1*x+前-1的选j个数#include<bits/stdc++.h>using namespace std;const int N=5e3+9;#define int long longint dp[N][N];signed main(){ int n,mod; cin>>n>>mod; for(int i=0;i<=n;i++)dp[i][0]=1;原创 2022-03-19 19:19:32 · 4674 阅读 · 0 评论 -
550C - Divisibility by Eight (数论 dp 记录转移
添加链接描述dp就是前i位的取模,剩余数字模8结果#include<bits/stdc++.h>using namespace std;const int N=1e3+9;int dp[N][N];int pre[N][N];int main(){ string s; cin>>s; memset(pre,-1,sizeof pre); dp[0][(s[0]-'0')%8]=1; for(int i=1;i<s.size(原创 2022-03-17 22:51:30 · 347 阅读 · 0 评论 -
A. Boredom (线性dp
添加链接描述自底向上转移,最优子结构#include<bits/stdc++.h>using namespace std;#define int long longconst int N=1e5+9;int arr[N];int dp[N];signed main(){ int n; cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; ar原创 2022-03-16 19:46:39 · 695 阅读 · 1 评论 -
1075. 数字转换 (求约数 树形dp 求树的最长直径
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=5e4+9,M=1e5+9;int arr[N];int h[N],e[M],ne[M],idx;void add(int a,int b){ e[++idx]=b,ne[idx]=h[a],h[a]=idx;}int ans=0;int dfs(int u,int fa){ int d1=0,d2=0; for(int i=h[u]原创 2022-03-16 18:02:03 · 238 阅读 · 0 评论 -
荷香堪筑梦,鸳鸯和月寻。 (线性dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9;char s[N][N];int dp[N][N];int main(){ int n,m,x; cin>>n>>m>>x; for(int i=1;i<=n;i++)scanf("%s",s[i]+1); int p=0; for(int i=1;i<=m;i++原创 2022-03-15 22:44:40 · 200 阅读 · 0 评论 -
1073. 树的中心 (dfs 树形dp
添加链接描述首先向下遍历找的最长路径和次长路径然后向上找到最长路径,这个路径就是父节点向上的最长和向下的最长,如果向下最长经过这个结点,要更新为次长路径,#include<bits/stdc++.h>using namespace std;const int N=1e5+9,M=2*N,INF=0x3f3f3f3f;int h[N],w[M],e[M],ne[M],idx;void add(int a,int b,int c){ w[++idx]=c; e[idx]原创 2022-03-14 22:56:19 · 323 阅读 · 0 评论 -
筑巢 (树形dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=2e5+9;#define int long longint arr[N];int h[N],e[N],ne[N],w[N],idx;void add(int a,int b,int c){ w[idx]=c; e[idx]=b,ne[idx]=h[a],h[a]=idx++;}int ans=-1e18;//!!注意取最小值int dfs原创 2022-03-11 22:56:37 · 143 阅读 · 0 评论 -
1072. 树的最长路径 (树形dp dfs
添加链接描述找到每个点的下面两条路径最大,然后得到这个最大值的点就是最长路径为了得到点的最大值路径,要不断统计下面的子树的最大值和次大值,通过不断累积记录最大和次大然后取max保存为当前点的值#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int h[N],e[N],ne[N],w[N],idx;void add(int a,int b,int c){ w[idx]=c; e[idx]=b,n原创 2022-03-10 22:39:23 · 290 阅读 · 0 评论 -
爆炸的符卡洋洋洒洒 (01背包
二维dp添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9;#define int long long int dp[N][N];signed main(){ int n,k; cin>>n>>k; memset(dp,-0x3f,sizeof dp); dp[0][0]=0; for(int i=1;i<=n;i++){原创 2022-02-09 20:54:17 · 384 阅读 · 0 评论 -
智乃买瓜 (背包dp
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9;#define int long longint dp[N][N],mod=1e9+7;signed main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ int w; cin>>w; for原创 2022-02-01 23:37:59 · 204 阅读 · 0 评论 -
九小时九个人九扇门 (dp 思维
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+9;#define int long longint mod=998244353;int dp[N][15];//dp表示前i个人为j的结果signed main(){ int n; cin>>n; dp[0][0]=1; for(int i=1;i<=n;i++){ int x; .原创 2022-01-27 23:39:01 · 558 阅读 · 0 评论 -
满意的集合 (数论 dp 寄
添加链接描述#include<bits/stdc++.h>using namespace std;typedef long long ll;ll dp[15][3],mod=1e9+7;ll arr[15];int main(){ for(int i=1;i<=9;i++)cin>>arr[i]; dp[0][0]=1;//空集也算 for(int i=1;i<=9;i++){ int mod1=1*i%3,mod2=2原创 2022-01-15 14:41:22 · 116 阅读 · 0 评论