CCPC-Wannafly Winter Camp Div2 Day4 自闭总结

今天拿了队内一血,还是免不了接受被队友carry的命运
A题 简单dp,类似NOIp2000方格取数

#include <bits/stdc++.h>
#define LL long long
#define N 100000
using namespace std;
int n,m;
LL dp[N][5];
struct node{
	int x1,x2,y1,y2;
}t[N];
void solve(){
	int x1,x2,y1,y2;
	scanf("%d%d",&t[1].x1,&t[1].y1);
	scanf("%d%d",&t[1].x2,&t[1].y2);
	dp[1][1]=dp[1][2]=0;
	for (int i=2;i<=n;i++)
	{
		scanf("%d%d",&t[i].x1,&t[i].y1);
		scanf("%d%d",&t[i].x2,&t[i].y2);
		dp[i][1] = dp[i-1][1] + abs(t[i].x1-t[i-1].x1) + abs(t[i].y1-t[i-1].y1)
							  + abs(t[i].x2-t[i-1].x2) + abs(t[i].y2-t[i-1].y2);
		dp[i][1] = min(dp[i][1], dp[i-1][2] + abs(t[i].x1-t[i-1].x2)+abs(t[i].y1-t[i-1].y2)
							  + abs(t[i].x2-t[i-1].x1) + abs(t[i].y2-t[i-1].y1) );
		
		dp[i][2] = dp[i-1][2] + abs(t[i].x2-t[i-1].x2) + abs(t[i].y2-t[i-1].y2)
							  + abs(t[i].x1-t[i-1].x1) + abs(t[i].y1-t[i-1].y1);
		dp[i][2] = min(dp[i][2], dp[i-1][1] + abs(t[i].x2-t[i-1].x1)+abs(t[i].y2-t[i-1].y1)
							  + abs(t[i].x1-t[i-1].x2) + abs(t[i].y1-t[i-1].y2) );
	}
	LL ans = min(dp[n][1],dp[n][2]) + abs(t[n].x1-t[n].x2) + abs(t[n].y1-t[n].y2);
	printf("%lld\n",ans);
}
int main(){
	scanf("%d%d",&n,&m);
	solve();
	return 0;
}

C题 最优的解法应该是从节点的度出发,判断YES or NO
D题 数论
F题 经过推导,马走日的最小不可完全遍历的网格为3*4。故判断即可
G题 动态规划
I题 三分 + 贪心策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值