|
#转自
对于方格取数问题,定义状态 $dp[j][i]$ 表示走到第 $j$ 列第 $i$ 行时能获得的最大和。 ## 初始条件 $$dp[0][0] = a[0][0]$$ $$dp[0][i] = dp[0][i-1] + a[i][0], \quad 1 \leq i < n$$ ## 状态转移方程 $$dp[j][i] = \max_{0 \leq k < n} \left(dp[j-1][k] + \sum_{l=\min(i,k)}^{\max(i,k)} a[l][j]\right), \quad 1 \leq j < m, 0 \leq i < n$$ ## 最终答案 $$answer = dp[m-1][n-1]$$ 其中: - $n$ 为行数,$m$ 为列数 - $a[i][j]$ 表示第 $i$ 行第 $j$ 列的值 - $\min(i,k)$ 和 $\max(i,k)$ 分别表示 $i$ 和 $k$ 中的较小值和较大值 - 求和项表示在第 $j$ 列中从第 $k$ 行走到第 $i$ 行所经过的所有格子的值之和 |
|
666,我还以为是个搜索,要不然记忆化要不然剪枝,结果你告诉我是dp?改了半天搜索就30分结果回家一问chatgpt是动规?
|
|
转成2进制就可以了,但是手动转太麻烦了,由于我是懒狗,所以直接位运算判断一位是啥就可以了,挺好写的,这是集体账号,代码贡献@阿米娅,不是的 |
|
注意!N最大为63,不是60!
题目 1196 [POJ 1011] 木棍拼接
2025-09-02 20:00:41
|
|
回复 @yrtiop : 我感觉作者就是那个考零分的
题目 4124 最后一课
2025-08-29 11:47:20
|
|
|
|
不保证 b<=n
题目 3066 [POJ 1201]区间
2025-08-12 09:32:59
|
|
好题,没有想象的那么简单
题目 3793 [POI 2012]Salaries
2025-08-11 09:51:09
|
|
状压DP?不像学生出的,背后必有高人指点
题目 725 [SDOI 2007] 科比的比赛
2025-08-01 21:27:57
|
|
题目ID破案里
题目 4156 因你而在的故事
2025-08-01 21:15:51
|
|
这真的是能做出来的吗
题目 725 [SDOI 2007] 科比的比赛
2025-08-01 21:14:24
|
|
所以为设么叫失落的猴子
题目 572 失落的猴子
2025-08-01 19:38:43
|
|
{
address[adr]=i; puts("OK"); } } else if(cpt=="Client") { if(address.count(adr))printf("%d\n",address[adr]); else puts("FAIL"); } } return 0; }
题目 3617 [CSP 2021J]网络连接
2025-07-30 19:24:11
|
|
if(0<=tmp&&tmp<=65535) return true;
else return false; } int main(){ freopen("csp2021pj_network.in","r",stdin); freopen("csp2021pj_network.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) { string cpt,adr; cin>>cpt>>adr; if(!check(adr))puts("ERR"); else if(cpt=="Server") { if(address.count(adr))puts("FAIL"); else
题目 3617 [CSP 2021J]网络连接
2025-07-30 19:23:26
|
|
else if(s[i]==':') cnt2++;
if(cnt1<3&&cnt2) return false; if(!cnt3) return false; if(0<=tmp&&tmp<=255) { tmp=0; continue; } else return false; } else if(s[i]<'0'||s[i]>'9') return false; if(i&&!tmp&&s[i-1]=='0') return false; tmp = tmp*10+s[i]-'0'; } if(cnt1!=3||cnt2!=1||cnt3!=5) return false;
题目 3617 [CSP 2021J]网络连接
2025-07-30 19:22:42
|
|
#include <bits/stdc++.h>
using namespace std; int n; map<string,int>address; bool check(string s) { int len=s.length(); long long tmp=0; int cnt1=0,cnt2=0,cnt3=0; for(int i=0;i<len;i++) { if((i==0||(s[i-1]=='.'||s[i-1]==':'))&&s[i]>='0'&&s[i]<='9') cnt3++; if(s[i]=='.'||s[i]==':') { if(s[i]=='.') cnt1++; else if(s[i]==':') cnt2++;
题目 3617 [CSP 2021J]网络连接
2025-07-30 19:19:43
|
|
回复 @回归运动 :
#include<bits/stdc++.h> using namespace std; bool cmp(int a,int b) { if() } int main() { freopen("csp2021pj_sort.in","r",stdin); freopen("csp2021pj_sort.out","w",stdout); int n,q; cin>>n>>q; int a[n+1],b[n+1]; for(int y=1;y<=n;y++) {cin>>a[y]; b[y]=y; } return 0;
题目 3616 [CSP 2021J]插入排序
2025-07-28 19:31:14
|
|
回复 @*附加题* :
题目 3616 [CSP 2021J]插入排序
2025-07-28 19:26:18
|
|
回复 @yrtiop :
题目 3616 [CSP 2021J]插入排序
2025-07-28 19:25:14
|
|
普及组的剑也未必不利!
题目 1444 [NOIP 2013]车站分级
2025-07-27 19:32:09
|