B.简单模拟

/* 寻找每一张公交票可用的最早的地铁优惠票,使用过之后一定要销毁*/

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 int n;
 6 int price[100005];
 7 int times[100005];
 8 int vis[100005];
 9 int ans=0;
10 int cnt=0;
11 int check=0;
12 int main()
13 {
14     scanf("%d",&n);
15     for(int i=1;i<=n;i++){
16         int a,b,c;
17         scanf("%d%d%d",&a,&b,&c);
18         if(a==0){
19             ans+=b;
20             price[cnt]=b;
21             times[cnt]=c;
22             cnt++;
23         }else{
24             int flag=0;
25             int buge=check;
26             while(buge<cnt){
27                 if(c-times[buge]<=45){
28                     if(price[buge]>=b){
29                         flag=1;
30                         price[buge]=-1000000001;
31                         break;
32                     }
33                 }
34                 else
35                     check++;
36                 buge++;
37             }
38             if(flag==0){
39                 ans+=b;
40             }
41         }
42     }
43     printf("%d\n",ans);
44     return 0;
45 }

 

C.完全背包

/*需要进行模型转换 背包容量为金币数量 物品的体积为纪念品的单价 物品的价值为今天买入明天卖出的收益*/

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 int t,n,m;
 6 int a[105][105];
 7 int cha[105][105];
 8 int dp[10005];
 9 int main(){
10     scanf("%d %d %d",&t,&n,&m);
11     for (int i=1; i<=t; i++) {
12         for(int j=1;j<=n;j++){
13             scanf("%d",&a[i][j]);
14         }
15     }
16     for(int i=1;i<=t;i++){
17         for(int j=1;j<=n;j++){
18             cha[i][j]=max(0,a[i+1][j]-a[i][j]);
19         }
20     }
21     for(int i=1;i<=t;i++){
22         for(int s=0;s<=m;s++){
23             dp[s]=0;
24         }
25         for(int j=1;j<=n;j++){
26             for(int s=a[i][j];s<=m;s++){
27                 dp[s]=max(dp[s],dp[s-a[i][j]]+cha[i][j]);
28             }
29         }
30         m=m+dp[m];
31     }
32     printf("%d\n",m);
33     return  0;
34 }