POJ 3670 DP LIS?
2016-09-26 16:27
323 查看
权值为1~3 好了 此题是水题……
i表示到了第i个数,j表示结尾的数是j
f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)) 1<=k<=j
最长上升的.
同理我们可以再写一个g[i][j]表示最长下降的
i表示到了第i个数,j表示结尾的数是j
f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)) 1<=k<=j
最长上升的.
同理我们可以再写一个g[i][j]表示最长下降的
//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,a[33333],f[33333][4],g[33333][4],ans=0x3fffff; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); memset(f,0x3f,sizeof(f)),memset(g,0x3f,sizeof(g)); for(int i=1;i<=3;i++)f[0][i]=g[0][i]=0; for(int i=1;i<=n;i++) for(int j=1;j<=3;j++){ for(int k=1;k<=j;k++) f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)); for(int k=j;k<=3;k++) g[i][j]=min(g[i][j],g[i-1][k]+(a[i]!=j)); } for(int i=1;i<=3;i++)ans=min(ans,min(f [i],g [i])); printf("%d\n",ans); }
相关文章推荐
- POJ3670 Eating Together LIS DP
- POJ3670 Eating Together LIS DP
- POJ 3670 DP LIS?
- POJ 3670 Eating Together (DP,LIS)
- POJ 3670 Eating Together(LIS)
- poj 1239 Increasing Sequences dp lis
- POJ 1836 Alignment(DP LIS)
- Poj 1631 Bridging signals(二分+DP 解 LIS)
- POJ 3666 Making the Grade (DP/LIS变形)
- poj 2533 DP(LIS)
- POJ 3670 Eating Together(dp)
- POJ 3671 Dining Cows (DP,LIS, 暴力)
- poj-3616 DP,LIS
- DP LIS(最长上升子序列) POJ 2533 POJ 1836 POJ 2138 HDU 1069
- POJ 1836-Alignment(DP/LIS变形)
- 【DP|LIS】POJ-2533 Longest Ordered Subsequence(O(n^2)、O(nlogn))
- DP LIS(最长上升子序列) POJ 2533 POJ 1836 POJ 2138 HDU 1069
- poj 3670/3666 dp(吃饭的顺序/加强版)
- poj 1065 Wooden Sticks dp LIS
- poj 1631 Bridging signals dp LIS