第八周 7.5-7.11

7.5-7.6

考数分背英语没码程序。

7.7

 什么都没干。

7.8

HDU 2602 Bone Collector 01背包裸题

第八周 7.5-7.11
 1 # include <iostream>

 2 # include <cstdio>

 3 # include <cstring>

 4 # include <algorithm>

 5 using namespace std;

 6 int cost[1001],value[1001],f[1001][1001];

 7 

 8 int main(void)

 9 {

10     int T;cin>>T;

11     while(T--)

12     {

13         memset(f,0,sizeof(f));

14         int N,V; scanf("%d%d",&N,&V);

15         for(int i=1;i<=N;i++) scanf("%d",value+i);

16         for(int i=1;i<=N;i++) scanf("%d",cost+i);

17         for(int i=1;i<=N;i++)

18             for(int j=0;j<=V;j++)

19                 if(cost[i]<=j) f[i][j]=max(f[i-1][j],f[i-1][j-cost[i]]+value[i]);

20                 else f[i][j]=f[i-1][j];

21         printf("%d\n",f[N][V]);

22     }

23     return 0;

24 }
Aguin

 设想是简单过下背包后dp先放。看下字符串。

然而此阶段抽时间码题真不容易。毕竟高代还是有点慌。

7.9

 HDU 2602 Bone Collector 滚动数组

第八周 7.5-7.11
 1 # include <iostream>

 2 # include <cstdio>

 3 # include <cstring>

 4 # include <algorithm>

 5 using namespace std;

 6 int cost[1001],value[1001],f[1001];

 7 

 8 int main(void)

 9 {

10     int T;cin>>T;

11     while(T--)

12     {

13         memset(f,0,sizeof(f));

14         int N,V; scanf("%d%d",&N,&V);

15         for(int i=1;i<=N;i++) scanf("%d",value+i);

16         for(int i=1;i<=N;i++) scanf("%d",cost+i);

17         for(int i=1;i<=N;i++)

18             for(int j=V;j>=cost[i];j--)

19                 f[j]=max(f[j],f[j-cost[i]]+value[i]);

20         printf("%d\n",f[V]);

21     }

22     return 0;

23 }
Aguin

 7.10

什么都没干。

7.11

 打了个BC。又爆0了。不过感觉这次的题可以做- -

 

HDU5280 Senior's Array

过了然被骇。(补题的时候一个地方i写成1找了好久QAQ

第八周 7.5-7.11
 1 # include <iostream>

 2 # include <cstdio>

 3 # include <algorithm>

 4 using namespace std;

 5 long long sum[1001][1001];

 6 int a[1001];

 7 

 8 int main(void)

 9 {

10     int T;cin>>T;

11     while(T--)

12     {

13         int n,p; scanf("%d%d",&n,&p);

14         for(int i=1;i<=n;i++) scanf("%d",a+i);

15         long long ans=-1000000000000LL;

16         for(int i=1;i<=n;i++)

17         {

18             int m;

19             for(int j=i;j<=n;j++)

20             {

21                 if(j==i) m=sum[i][j]=a[i];

22                 else sum[i][j]=sum[i][j-1]+a[j];

23                 if(a[j]<m) m=a[j];

24                 if(i==1&&j==n) ans=max(ans,sum[i][j]-m+p);

25                 else ans=max(ans,sum[i][j]-m+max(m,p));

26             }

27         }

28         printf("%I64d\n",ans);

29     }

30     return 0;

31 }
Aguin

 

题解有个O(n)的dp方法。挖个坑。

 

HDU5281 Senior's Gun

早早的过了。然而clarification里有人喊数据错了。

过了一会就rejudge了。然后我终测就跪了。

(和出题人错一块去了??

第八周 7.5-7.11
 1 # include <iostream>

 2 # include <cstdio>

 3 # include <algorithm>

 4 using namespace std;

 5 int a[100000+10],b[100000+10];

 6 

 7 int main(void)

 8 {

 9     int T;cin>>T;

10     while(T--)

11     {

12         int n,m; scanf("%d%d",&n,&m);

13         for(int i=1;i<=n;i++) scanf("%d",a+i);

14         for(int i=1;i<=m;i++) scanf("%d",b+i);

15         sort(a+1,a+n+1); sort(b+1,b+m+1);

16         long long sum1=0,sum2=0;

17         for(int i=0;i<min(m,n);i++)

18         {

19             if(a[n-i]>=b[1+i])

20             {

21                 sum1+=a[n-i];

22                 sum2+=b[1+i];

23             }

24             else break;

25         }

26         printf("%I64d\n",sum1-sum2);

27     }

28     return 0;

29 }
Aguin

 

 

万恶考试。

结果背包也没看。BC待补。

你可能感兴趣的:(第八周 7.5-7.11)