HDU1158 动态规划

还是看了别人的思路才做出来..

http://blog.youkuaiyun.com/ice_crazy/article/details/7575703

/*
分析:
    i为月数,l为人数,num[i]为第i月需要多少人,total是最多要多少人。
    dp[i][l]=min(dp[i-1][k]+l*s+k>l?(k-l)*f:(l-k)*h)    num[i-1]<=k<=total
ans=min(dp[最后一月][k])         num[最后一月]<=k<=total


                                               2012-05-17

*/

//递推方程  dp[i][l] = minn(dp[i][l],dp[i-1][k]+l*s+(k>l?(k-l)*f:(l-k)*h))
//  k>=num[i-1]&&k<=total;
#include<stdio.h>
int dp[13][1001];
int num[13];
int minn(int a,int b)
{
	return a>b?b:a;
}
int main()
{
	int ans,total;
	int s,f,h;
	int i,m,k,n,j,l;
	while(1)
	{
		scanf("%d",&m);
		if(m==0)break;
		total = -1;
		scanf("%d%d%d",&h,&s,&f);
		//找出最大人数
		for(i=0;i<m;i++)
		{
			scanf("%d",&num[i]);
			if(total < num[i])total=num[i];
		}

		if(total==0)
		{
			printf("0\n");
			return 0;
		}

		//第一个月初始化
		for(k=num[0];k<=total;k++)
			dp[0][k] = k*(h+s);

		for(l=1;l<m;l++)
		{
			for(n=num[l];n<=total;n++)
			{

				if(n > num[l-1])
					dp[l][n]=(n-num[l-1])*h+dp[l-1][num[l-1]]+n*s;
				else
					dp[l][n]=(num[l-1]-n)*f+dp[l-1][num[l-1]]+n*s;

				for(j=num[l-1]+1;j<=total;j++)
				{
					if(j>n)
						dp[l][n]=minn(dp[l][n],dp[l-1][j]+n*s+(j-n)*f);
					else
						dp[l][n]=minn(dp[l][n],dp[l-1][j]+n*s+(n-j)*h);
				}
			}
		}

		ans = 0x7fffffff;
		for(j=num[m-1];j<=total;j++)
			ans = minn(ans,dp[m-1][j]);
		printf("%d\n",ans);
	}
	return 0;
}




<think>好的,我现在要解决用户遇到的Git推送时出现403错误的问题。首先,我需要了解403错误通常意味着什么。HTTP 403错误表示服务器理解请求,但拒绝执行,常见于权限问题。用户提到在推送时出现无法访问的错误,可能和身份验证或权限有关。 根据用户提供的引用,特别是引用[3],用户可能在输入GitHub账号密码时输错了,导致认证失败。这时候,Git会返回403错误,因为服务器拒绝访问。另外,引用[2]提到HTTPS代理的问题,虽然用户的问题可能不直接是代理,但也需要考虑网络配置的影响。 首先,我需要确认用户的身份验证方式是否正确。GitHub现在推荐使用个人访问令牌(PAT)代替密码,因为密码认证已经在2021年8月被废弃。用户可能还在使用密码,这会导致认证失败。因此,第一步是建议用户检查是否使用PAT,并生成新的令牌。 其次,用户可能配置了错误的远程仓库URL。检查远程仓库的URL是否正确,特别是用户名和仓库名是否有误。使用git remote -v可以查看当前配置的URL,并确保其正确性。 另外,可能存在本地缓存的错误凭据。系统凭据管理器可能保存了旧的或错误的凭据,需要清除这些缓存,然后重新输入正确的凭据。 还有可能是仓库权限问题,用户是否有权限写入目标仓库。如果用户没有权限,需要联系仓库管理员进行确认。 网络问题也可能导致无法访问,比如代理设置不正确。引用[2]提到HTTPS代理的问题,需要检查git的代理配置,尤其是http.proxy和https.proxy的设置,确保其正确或尝试关闭代理测试。 步骤总结: 1. 检查并更新身份验证方式,改用个人访问令牌。 2. 验证远程仓库URL的正确性。 3. 清除缓存的错误凭据。 4. 确认用户对仓库有写入权限。 5. 检查网络和代理设置,排除连接问题。 最后,根据用户提供的引用,特别是引用[3]中的情况,用户可能输入了错误的账号密码,所以需要确保使用正确的凭据。此外,使用SSH协议代替HTTPS可能绕过某些代理问题,也是一个可行的解决方案。</think>要解决Git推送时出现`fatal: unable to access... 403 error`的问题,可以按以下步骤排查和修复: --- ### **1. 检查身份验证方式** - **原因**:GitHub已弃用密码认证,需使用**个人访问令牌(PAT)**或**SSH密钥**。 - **解决方案**: 1. 生成新的PAT:登录GitHub → Settings → Developer settings → Personal access tokens → 生成新令牌(需勾选`repo`权限)[^1]。 2. 推送时使用PAT代替密码: ```bash git push https://<你的用户名>:<生成的PAT>@github.com/用户名/仓库名.git ``` --- ### **2. 验证远程仓库URL** - **原因**:URL中可能包含错误的用户名或仓库名。 - **解决方案**: ```bash git remote -v # 查看当前远程仓库配置 git remote set-url origin https://github.com/正确用户名/正确仓库名.git # 修正URL ``` --- ### **3. 清除本地凭据缓存** - **原因**:系统可能缓存了错误的账号密码。 - **解决方案**(以Windows为例): 1. 打开“控制面板” → 凭据管理器 → 删除与GitHub相关的凭据。 2. 重新推送时输入正确的用户名和PAT。 --- ### **4. 检查仓库权限** - **原因**:当前账户无目标仓库的写入权限。 - **解决方案**: - 联系仓库管理员确认权限。 - 若为组织仓库,需加入对应团队并分配权限。 --- ### **5. 网络与代理问题** - **原因**:代理配置错误或网络限制导致无法连接GitHub。 - **解决方案**: 1. 检查代理设置: ```bash git config --global --get http.proxy # 查看代理配置 git config --global --unset http.proxy # 关闭代理(若不需要) ``` 2. 尝试切换至SSH协议: ```bash git remote set-url origin git@github.com:用户名/仓库名.git ``` --- ### **6. 其他可能原因** - **双因素认证(2FA)**:启用2FA的账户必须使用PAT或SSH密钥。 - **防火墙/杀毒软件**:临时关闭防火墙测试是否拦截连接。 --- ### **总结流程** 1. 生成PAT并更新远程仓库URL。 2. 清除本地凭据缓存。 3. 检查权限与网络设置。 4. 尝试切换至SSH协议。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值