1. 程式人生 > >PKU campus 2018 A Wife——差分約束?/dp

PKU campus 2018 A Wife——差分約束?/dp

fine define stream esp pre lld efi 方案 之前

題目:http://poj.openjudge.cn/campus2018/A

有正規的差分約束做法,用到矩陣轉置等等。

但也有簡單(?)的dp做法。

  有一個結論(?):一定要麽在一天一點也不選,要麽在一天選了7個小時。

  於是dp[ i ]表示第 i 天選了7個小時、之前合法 的方案數。可以從i-1到i-7轉移。答案是n到n-6。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=1e5+5;
int T,n; ll dp[N],c[N],ans; int main() { scanf("%d",&T); while(T--) { memset(dp,0x3f,sizeof dp);dp[0]=0;// scanf("%d",&n);ans=0x3f3f3f3f; for(int i=1;i<=n;i++)scanf("%lld",&c[i]); for(int i=1;i<=n;i++) for(int j=i-1;j>=i-7&&j>=0;j--)//>=0 dp[i]=min(dp[i],dp[j]+7
*c[i]); for(int i=n;i>=n-6&&i>=1;i--)ans=min(ans,dp[i]); printf("%lld\n",ans); } return 0; }

PKU campus 2018 A Wife——差分約束?/dp