dp
,
infinity°º
stay hungry stay foolish
展开
-
密码锁:dp
从最大的开始(倒着)更新每个点的下一个,保证了输出顺序 。不用sort ,节省时间 题目描述 2s 行旅箱上一般有一个 4 位的密码锁,每一位是0 - 9共10个数字,可上下转动。 若密码锁的 4 个位不完全相同,则称状态不同,例如 0234、1235是两个不同的状态,因此有0000 - 9999共10000个不同的状态。 设现有一个 k 位密码锁,每次能转动相邻的若干位,例如:0000 -> 0111、0000 -> 0990都可能是转动 1次。 求某个初始状态转动 1次所能到达的状..原创 2021-12-13 19:38:38 · 244 阅读 · 0 评论 -
hdu3555经典数位dp
使用条件:求 在某个区间内满足某种要求的数据 个数 #include<bits/stdc++.h> typedef long long ll; using namespace std; const int maxn=100; ll dp[100][2],b[100]; ll dfs(int n,int isf,int ism){ //ism表示之前是否是最大 if(!n) return 1; if(!ism&&dp[n][isf]!=-1) return dp.原创 2021-08-23 16:50:22 · 106 阅读 · 0 评论 -
LIS(最长上升子序列)求和 hdu1087(长度优先,i为下标)
#include<bits/stdc++.h> using namespace std; const int maxn=1e3+5; int n,a[maxn],dp[maxn]; int main(){ while(cin>>n){ if(n==0) break; for(int i=0;i<n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); int ans=0; for(int i=0;.原创 2021-05-24 19:14:58 · 77 阅读 · 0 评论 -
LIS求路径过程 hdu1160(长度优先,i为下标)
#include<bits/stdc++.h> using namespace std; #define LOCAL const int maxn=1e3+5; int f[maxn],ans[maxn],dp[maxn],pre[maxn]; struct ss{ int w,s,id; }a[maxn]; bool cmp(ss a,ss b){ if(a.w==b.w ) return a.s<b.s; return a.w>b.w; } int main(){ #.原创 2021-05-23 22:35:18 · 93 阅读 · 0 评论 -
LIS hdu1257(长度优先,)
#include<bits/stdc++.h> using namespace std; const int maxn=3*1e4+7; int n,a[maxn],b[maxn]; int main(){ while(cin>>n){ int ans=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]=1; } for(int i=1;i<=n;i++){ for(int j=.原创 2021-05-23 20:49:31 · 118 阅读 · 0 评论 -
hdu1421
#include<bits/stdc++.h> using namespace std; const int maxn=2*1e3+5; int a[maxn],b[maxn],dp[maxn][maxn]; int main(){ int n,k; while(cin>>n>>k){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=2;i<=n;.原创 2021-05-23 20:35:56 · 58 阅读 · 0 评论 -
hdu1176
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; int dp[maxn][15]; int main(){ int n,x,t,T; while(~scanf("%d",&n),n){ T=0; //每组数据重置0别忘了 memset(dp,0,sizeof(dp)); while(n--){ scanf("%d%d",&x,&t); dp[t][x]++;.原创 2021-05-23 14:29:37 · 48 阅读 · 0 评论 -
LIS(二分)求长度 hdu1950 (值优先,等长结尾小的优先)
#include<bits/stdc++.h> using namespace std; const int maxn=1e4+5; const int inf=0x3f3f3f3f; int a[maxn*4],b[maxn*4]; int main(){ int T,n,len; cin>>T; while(T--){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); .原创 2021-05-23 09:48:33 · 73 阅读 · 0 评论 -
hdu2084
#include<bits/stdc++.h> using namespace std; const int maxn=105; int C,n,dp[maxn][maxn]; int main(){ cin>>C; while(C--){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ scanf("%d",&dp[i][j]); } } for(i.原创 2021-05-18 19:40:50 · 53 阅读 · 0 评论 -
hdu1058 输出so恶心
#include<bits/stdc++.h>//英语学不好,输出搞不好 using namespace std; const int maxn=6000; typedef long long ll; int n; ll a[maxn+1]; int main(){ ll l1=1,l2=1,l3=1,l4=1; ll y=1; a[1]=1; for(int i=2;i<=maxn;i++){ y=min(2*a[l1],min(3*a[l2],.原创 2021-05-09 20:49:24 · 76 阅读 · 0 评论