分析:该題可以用贪心来做,类似于节目时间安排的问题,桌子的移动房间看作时间处理。
下面是另一种更简便的做法。把奇数房间号和偶数房间号映射为房间在走廊上的位置,从1到200;开一个数组,每次从s移桌子到t就把中间走廊的每个位置都加1,最后扫描整个数组,找出最大值在乘上移动一张桌子所用的时间就是必须花费的时间。
#include
using namespace std;
int room...
分类:
其他好文 时间:
2015-04-29 21:43:45
阅读次数:
129
分析:L段,N圈,则总共可表示为L*N段,用增加20%的能量表示一个状态,则可表示20%,40%,%60。。。,共15个,注意第15个时要清零到两个能量卡;用dp[i][j]表示在第i段能量为j的已用时的最少时间。则可得到方程1、不用能量卡时dp[i][j]=min(dp[i][j],dp[i-1][j-1]+a[i-1];用能量卡时dp[i][j-5]=min(dp[i][j-5],dp[i-1...
分类:
其他好文 时间:
2015-04-29 15:13:45
阅读次数:
115
Rikka with string
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 937 Accepted Submission(s): 334
Problem Description
As we know...
分类:
其他好文 时间:
2015-04-29 15:11:03
阅读次数:
298
分析:最大流的入门题,BFS寻找增广路,找到则更新流量,直到找不到增广路为止。
#include
#include
using namespace std;
#define N 202
#define MAX 0x7fffffff;
class Max_Flow_EK
{
public:
Max_Flow_EK(){}
~Max_Flow_EK(){}
int Run(int n,in...
分类:
编程语言 时间:
2015-04-28 18:35:06
阅读次数:
187
分析:找到吉米从办公室穿过森林回到家(也就是从点1到点2)的最短路径有多少条,其中要满足如果要走A到B这条路,那么就有从A到终点的距离都大于B到终点的距离。
解法:spfa算法+记忆化深搜
1、spfa求出从终点2到其他所有点的最短路
2、记忆化DFS从1开始向其他点深搜,最后结果就是dp[1]。
#include
#include
using namespace std;
...
分类:
编程语言 时间:
2015-04-28 09:55:16
阅读次数:
145
分析:
1、当饭卡余额小于5元直接输出,不能购买菜了。
2、选出一种价值最大的菜最后购买,以尽可能使余额走到负数。
3、以余额减去5作为背包容量,因为只有接近5时,之后才能用来买最大的菜,除去最大菜的每种菜的价格作为价值和重量;以使所卖菜的价格尽可能接近5。
#include
#include
using namespace std;
int val[1001];
int dp[10...
分类:
其他好文 时间:
2015-04-27 23:49:55
阅读次数:
171
分析:经典的八数码问题,参考别人的代码写的,逆向广搜,把结果保存起来,之后在使用。
#include
#include
using namespace std;
#define STATE_COUNT 363000 //因为9!=362880
int fact[]={1,1,2,6,24,120,720,5040,40320,362880}; //0到9的阶乘,用来计算hash值
cha...
分类:
其他好文 时间:
2015-04-27 21:54:28
阅读次数:
175
分析:大数模拟和找规律。
#include
using namespace std;
char f[1001][501];
/*
从下面的步骤中可以看出,下一步的后半部分是前一步的整个串,所以对于后半部分有f[n]=f[n-1];
从前半部分和整体可以看出,另一部分有f[n]=f[n-1]-1(奇数步),f[n]=f[n-1]+1(偶数步)。
step0:1 ...
分类:
其他好文 时间:
2015-04-27 13:16:17
阅读次数:
117
分析:简单DP,转移方程dp[j]=max{dp[i]}+a[j];(0
#include
using namespace std;
__int64 dp[1001];
int a[1001];
int main()
{
int i,n,j;
__int64 max;
while(cin>>n && n)
{
for(i=0;i>a[i];
...
分类:
其他好文 时间:
2015-04-27 11:19:54
阅读次数:
100
分析:同时计算最短距离和花费,距离相同时还要更新费用,还要同时存储正向边和反向边。
注意:不能用cin和cout,否则会超时。
#include
#include
using namespace std;
int u[200002];
int v[200002];
int w[200002];
int p[200002];
bool vis[1001];
int d[1001];
i...
分类:
编程语言 时间:
2015-04-27 10:02:30
阅读次数:
206