2018 4月上半月总结

这大周主要是讲DP、背包。我比较蒙,DP听懂了一点点,背包只听懂了01背包。老师只有01和完全背包讲的详细。并给了模板

f[i][j]表示前i个草药 放入背包容量为j的背包可以获得最大的价值
c[i]  w[i]
//0/1 背包 
//二维 
for (int i=1;i<=n;i++)
  for(int v=1;v<=t;v++)
  {
     f[i][v]=f[i-1][v];
     if (v-c[i]>=0)  
       if (f[i-1][v-c[i]]+w[i]>f[i][v])
         f[i][v]=f[i-1][v-c[i]]+w[i];
  } 
//一维 
for (int i=1;i<=n;i++)
  for(int v=t;v>=c[i];v--)
  {    
       if (f[v-c[i]]+w[i]>f[v])
         f[v]=f[v-c[i]]+w[i];
  } 


//01背包求方案数 //集合求和 
ans=n*(n+1)/2
if (ans%2==1) 
{
   cout<<0<<endl;
   return 0;
}
ans=ans/2;
for (int i=1;i<=n;i++)
  for (int v=1;v<=ans;v++)
  {
     f[i][v]=f[i-1][v];
     if (v-i>=0) f[i][v]+=f[i-1][v-i];
  }
cout<<f[n][ans]/2;
//完全背包 
n*V*sig((m/v[i])//时间复杂度 
//完全背包 
//二维 
for (int i=1;i<=n;i++)
  for(int v=1;v<=t;v++)
  {
     f[i][v]=f[i-1][v];
     if (v-c[i]>=0)  
       if (f[i][v-c[i]]+w[i]>f[i][v])
         f[i][v]=f[i][v-c[i]]+w[i];
  } 
//一维 
for (int i=1;i<=n;i++)
  for(int v=1;v<=t;v++)
  {
     f[v]=f[i-1][v];
     if (v-c[i]>=0)  
       if (f[v-c[i]]+w[i]>f[i][v])
         f[v]=f[v-c[i]]+w[i];

  } 

放假主要是刷题但我也没刷几题。大概刷了十几二十题,我总共刷了110题,好开心啊,虽然在班中还算较少的,但刷到100以上还是很有成就感的。我把二维数组、字符串和高精度的题大部分刷了空了几个很难的题。二维数组的《方块转换》代码超级长,大概100行左右。高精度实在很在之前讲的,而且那时也没听很明白,所以只能去看以前的PPT了。因此我以后要尽量跟上班级的进度不然就要去炒冷饭了。

同时我打题时要细心一点。我考试时居然包子皮打错了,导致我看了半天。还有数组老是开小了,上次操作数组的时候我居然还没吸取教训,我上次数组开小了,花了n节课看程序。这次我还再吃亏:我一数组开小让我acs赛多提交了两次还是三次。这罚时可惨了。硬生生的让我掉了n个排名,我好心疼啊,也让我排名最后,事不过三这次亏吃够了下次一定要注意了。

————————————————————————————————————————————————————

就是有头牛要跑步它要跑n个小时,它一分钟可以跑a米,或休息。但它还有能力值,必须一休息就要要能力值到0,跑一分钟能力值++,休息一分钟能力值--,时间结束时能力值也为0。      这题看题把我看惨了。我没看到休息就必须休息到0,所以……唉,看题能力需加强啊!  这题暴力dp f[i][j]表示到第i个跳过了j个的最小值,然后暴力从前转移。 

#include<bits/stdc++.h>
using namespace std;
int a[11000],f[11000][510]={},l[21000]={};
int main()
{
int n,m,maxx;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=0;j<=i&&j<=m;j++)
{
if(j==0)
f[i][j]=max(f[i-1][j],l[i]);
else f[i][j]=f[i-1][j-1]+a[i];
   if(f[i][j]>l[i+j]) l[i+j]=f[i][j];
}
cout<<f[n][0];
return 0;

}

这次考试还有一题简单一点都是第二题。:把n头牛运过河,自己划一次要x分钟,每头牛有a[i]重量,使船慢a[i]

这题就是找规律的题了

#include<bits/stdc++.h>

using namespace std;
int n,m,l[51000],x[11000],a[11000];
int main()
{
cin>>n>>m;
x[0]=m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
x[i]=a[i]+x[i-1];
}
for(int i=1;i<=n;i++)
{
l[i]=x[i];
for(int j=0;j<=i;j++)
if(l[i-j]+x[j]+m<l[i]) l[i]=l[i-j]+x[j]+m;
}
cout<<l[n]<<endl;
return 0;

}

嗯  下大周呢按顺序是打到了进制与位运算。但这好像没讲很详细还是怎么样我不太会。但我还是要一题一题刷下去,所以打算下周把这个专题打了大概是8道题,可以空一两道难题和不会的题。

猜你喜欢

转载自blog.csdn.net/wangzhuojia/article/details/80009440